相机跟随物体,旋转除了 z 轴

Posted

技术标签:

【中文标题】相机跟随物体,旋转除了 z 轴【英文标题】:Camera follow object, rotate EXCEPT z axis 【发布时间】:2022-01-11 19:38:06 【问题描述】:

我有一个跟随飞机物体的相机,可以向左/向右旋转。我想防止相机在这个轴(z轴)上旋转。

this.transform.rotation = Cube.transform.rotation;

这显然会在飞机可以移动的所有方向上旋转相机。

我一直在尝试使用 zAxis 等做各种事情,只在 x 和 y 上旋转...

this.transform.Rotate(Cube.transform.rotation.xAngle, 0, 0, Space.Self);

https://docs.unity3d.com/ScriptReference/Transform.Rotate.html

但我无法解决。有人可以帮忙吗?

【问题讨论】:

Cube.transform.rotation.xAngle 这样的东西根本不存在... 只要你在两个(全局)轴上旋转,它总是会影响第三个(局部)轴...... 【参考方案1】:

最简单的方法可能是只使用LookAt,它允许您以查看目标对象的方式旋转相机,而不改变它的向上方向(=> Z 旋转)

我只是添加了一个简单的位置平滑和位置偏移——当然你也可以刮掉你不需要的,直接设置位置。

public class Example : MonoBehaviour

   // the target to follow
   [SerializeField] private Transform followTarget;
   // local offset to e.g. place the camera behind the target object etc
   [SerializeField] private Vector3 positionOffset;
   // how smooth the camera position is updated, smaller value -> slower
   [SerializeField] private float interpolation = 5f;
   
   private void Update()
   
      // target position taking the targets rotation and the offset into account
      var targetPosition = followTarget.position + followTarget.forward * positionOffset.z + followTarget.right * positionOffset.x + followTarget.up * positionOffset.y;

      // move smooth towards this target position
      transform.position = Vector3.Lerp(transform.position, targetPosition, interpolation * Time.deltaTime);
      
      // rotate to look at the target without rotating in Z
      transform.LookAt(followTarget);
   

【讨论】:

谢谢,这似乎正是我一直在寻找的!我是 Unity 的新手,似乎还有很多有用的东西我还没有发现(比如 LookAt,在这里)。唯一的问题是它非常紧张。我会继续玩它,但你知道为什么会这样吗?再次感谢@derHugo。 如果我只使用Time.deltaTime 作为 Vector3.Lerp 的 t 参数(不乘以插值),看起来很平滑 那么你的插值可能太大了,你的物体运动本身改变方向太快了..最终的因素必须是01Time.deltaTime之间的一个值。例如0.01666 60 FPS【参考方案2】:

我相信你想尝试设置相同的旋转,并省略 Z 轴,这样

Vector3 rotation = Cube.transform.rotation;
rotation.z = 0;
this.transform.eulerAngles = rotation;

这应该将相机的旋转设置为与您的立方体相同,没有 Z 轴。

【讨论】:

以上是关于相机跟随物体,旋转除了 z 轴的主要内容,如果未能解决你的问题,请参考以下文章

记录相机成像原理

Unity相机围绕物体

相机跟随(当移动的物体超过当前移动设备的高度一半的时候,相机跟随)

如何让物体跟随相机?

相机标定

实现相机平滑跟随物体移动