旋转第三人称相机的方向?

问题描述 投票:0回答:1

我希望我的对象旋转向相机在同一时间,当我旋转相机,使玩家在行走时总是在相机的方向,在典型的第三人称游戏.不幸的是,任何方法,到目前为止,导致我的对象的旋转,略微落后,相机的旋转.我一直在寻找一个解决方案,一个星期,我绝望了.我发布的视频,我有一个对象的旋转。

视频的后期旋转

private Rigidbody rb;
public float speed = 1.0f;

void Start()
    {
      rb = GetComponent<Rigidbody>(); 
    }

direction = Camera.main.transform.forward;
direction.y = 0.00f;

private void FixedUpdate ()
{

 Quaternion targetRotation = Quaternion.LookRotation(direction);
Quaternion newRotation = Quaternion.Lerp(rb.transform.rotation, targetRotation, speed * Time.fixedDeltaTime);
rb.MoveRotation(newRotation);
 }  

}
c# unity3d rotation transform quaternions
1个回答
1
投票

这是一个不恰当的使用 Quaternion.Lerp 因为你并没有用一个比例来计算要移动的距离。目前,你基本上是在告诉它只旋转一小部分到目标旋转的方式。

你应该使用 Quaternion.RotateTowards因为你可以很容易地计算出基于角旋转的 deltaTime (或: fixedDeltaTime 如你使用)。)

public float speed = 30f; // max rotation speed of 30 degrees per second

// ...

Quaternion newRotation = Quaternion.RotateTowards(rb.transform.rotation, targetRotation, 
        speed * Time.deltaTime);
rb.MoveRotation(newRotation);

在重新阅读了你的问题之后,现在看来你并不想要一个平滑的过渡lerp。在这种情况下,只需将旋转设置为目标旋转。

rb.MoveRotation(targetRotation);

如果这样的插值太多,不够直接的话 你可以将刚体的旋转设置为目标旋转 Update:

private void Update ()
{
    rb.rotation = Quaternion.LookRotation(direction);
}

0
投票

我想你不需要这些代码。你只需将摄像机作为你的角色在层次结构中的子变换,并将其对齐,使其在你的角色上方和后方。当他移动时,摄像机应该会自动跟随。

© www.soinside.com 2019 - 2024. All rights reserved.