使用 MoveRotation 查看另一个对象 Unity3d

Use MoveRotation to Look At Another Object Unity3d

基本上我正在寻找一种使用 rigidbody/physics 引擎让我的船看另一个物体(敌人)的简单方法。我想得到我的变换和敌人变换之间的方向,将其转换为旋转,然后使用内置的 MoveRotation 可能会起作用,但它会导致这种奇怪的效果,它只是有点倾斜船。我发布了一些代码以及尝试旋转飞船前后的图像(球体是敌人)。

private void FixedUpdate()
 {
     //There is a user on the ship's control panel.
     if (user != null)
     {
         var direction = (enemyOfFocus.transform.position - ship.transform.position);
         var rotation = Quaternion.Euler(direction);
         ship.GetComponent<Rigidbody>().MoveRotation(rotation);
     }
 }

之前。

之后.

好吧,Quaternion.Euler 是关于给定角度的旋转,为方便起见,提供为 Vector3

您的方向是一个从 ship 指向 enemyOfFocus 的矢量,并且具有大小,因此 x, y, z 值也取决于对象之间的距离。这些不是欧拉角!

您更想要的是 Quaternion.LookRotation(文档中的示例基本上就是您的用例;))

var direction = enemyOfFocus.transform.position - ship.transform.position;
var rotation = Quaternion.LookRotation(direction);
ship.GetComponent<Rigidbody>().MoveRotation(rotation);