使用 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);
基本上我正在寻找一种使用 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);