unity3d 如何使用度数输入在上下方向上围绕对象旋转Unity相机

y4ekin9u  于 2023-04-21  发布在  其他
关注(0)|答案(2)|浏览(128)

**给定一个输入Angular **,我想从自上而下的位置移动面向目标对象的相机(在图像中:90度)到底平面,沿着类似球面的曲线。

在图像(1)的左侧是上下方向的滑块,发射0-90(度)的值。如果滑块在45度,相机应该移动到对角线位置,如在图像(2)的中心,如果滑块在0,它应该在地板上,仍然面对目标对象。
请注意图中右侧部分(3),自上而下看情况:**摄像机可以在x-z平面上的任何位置。线是摄像机不同位置与目标物体之间的x-zAngular 。摄像机上下移动时应保持在这条线上。
我有凸轮的变换和位置,目标对象的变换和位置,两个位置之间的距离为Vector 3,以及0-90度的输入Angular 。
但是
我不明白我如何获取和使用凸轮和目标之间的Angular **。我找不到一个完整的例子来解决这个问题,只有一些片段,所以我迷失在欧拉角,四元数,transform.rotate,transform.rotation,AngleAxis,LookRotation和Google让我考虑的许多其他事情之间,例如arcball相机。
谁能给予我一个步骤步骤的例子,什么是正确的方式来移动相机所描述的图像?

void moveCamUpDownToDegree(float degree, Camera cam, Transform centerObjectTransform) {
    Vector 3 newCamPosition;

    //how to calculate the new position?

    cam.transform.position = newCamPosition;
    //last line if needed
    cam.transform.LookAt(centerObjectTransform);
        
}

谢谢你的帮助。

2o7dmzc5

2o7dmzc51#

更像是一个轨道系统或者类似于第三人称的东西,实际上它并没有看起来那么难,这里有一个例子:

using UnityEngine;

public class Sample : MonoBehaviour
{
    public Transform target; //Purpose of the object
    public Vector2 angle; //Purpose of the object
    public Vector3 offset; //Purpose of the object
    public float distance = 5; //Distance

    private void Update()
    {
        Quaternion rotation = Quaternion.Euler(angle.x,angle.y,0); 
        Vector3 position = rotation * new Vector3(0, 0, -distance) + target.position + offset;

        transform.position = position;
        transform.rotation = rotation;
    }

}
yyyllmsg

yyyllmsg2#

我相信最简单的方法是将相机游戏对象添加到一个新的父游戏对象中。
相机父对象需要与玩家处于完全相同的位置,而相机应该远离玩家,指向玩家。
然后当你改变幻灯片时,它应该只改变父对象的旋转,这样相机就会一直指向播放器。
您可以使用四元数来创建使用欧拉角的旋转。您的代码应该如下所示:

moveCamUpDownToDegree(float degree, GameObject cameraParentGO) 
{ 
    cameraParentGO.transform.rotation = new Quaternion.Euler(0,0,degree);
}

如果还希望摄像机跟随播放器,则可以创建另一个脚本,在每次更新时将摄像机父对象放置在播放器位置的顶部。

相关问题