围绕一个游戏对象旋转

时间:2019-09-17 13:26:17

标签: c# unity3d camera

在Unity中,我有一个具有以下结构的相机

GameObject Pan
    => GameObject Rotation
       => GameObject Zoom
          => GameObject Camera (the component that have the camera script)

我有一个对象目标

GameObject target;

我想围绕该对象沿所有方向旋转。就像是飞机一样,所以我可以左右旋转。

我有以下代码

void ChangePosition()
{
    if(Input.GetAxis("Horizontal") != 0 || Input.GetAxis("Vertical") != 0)
    {
        if (target)
        {
            transform.RotateAround(target.transform.position, transform.right, -Input.GetAxis("Vertical") * speed);
            transform.RotateAround(target.transform.position, transform.up, -Input.GetAxis("Horizontal") * speed);

            rotationObject.transform.LookAt(target.transform.position);
        }
    }
}

当您仅向左或向上移动时,效果很好。

但是,如果您同时移动展位,则旋转不再直观。它还会旋转照相机。

我希望相机仅向左或向上移动(所以绕2轴旋转,但不要对自己旋转)

我该如何解决?

1 个答案:

答案 0 :(得分:1)

我不喜欢使用RotateAround(),但是它们是一个简单得多的解决方案。首先修改层次结构,添加一个新对象,将其作为旋转中心,并将其放置在目标对象的中心。

GameObject Target (your target game object)
    => GameObject RotationCenter (local position: 0, 0, 0. The center of Target)
         => GameObject Camera

然后只需旋转新的游戏对象RotationCenter。这样的事情应该可以解决问题:

RotationCenter.Rotate(Input.GetAxis("Vertical") * speed, Input.GetAxis("Vertical") * speed);