我想将我的玩家车辆旋转到目标对象方向/侧面。
通过下图,我试图以更好的方式解释我的观点:
我想将下面的坦克对象旋转到另一个坦克对象,以便它可以指向那个方向。
我为此目的编写了这段代码,但它不起作用:
IEnumerator DoRotationAtTargetDirection(Transform opponentPlayer)
{
Quaternion targetRotation = Quaternion.identity;
do
{
Debug.Log("do rotation");
Vector3 targetDirection = opponentPlayer.position - transform.position;
targetRotation = Quaternion.LookRotation(targetDirection);
Quaternion nextRotation = Quaternion.Lerp(transform.localRotation, targetRotation, Time.deltaTime);
transform.localRotation = nextRotation;
yield return null;
} while (Quaternion.Angle(transform.localRotation, targetRotation) < 0.01f);
}
我只想平稳地旋转并朝着目标物体停止。
请分享您对此的建议。
EDIT:
这是更新后的代码,仍然不起作用,坦克对象卡在旋转中,如上图所示:
IEnumerator DoRotationAtTargetDirection(Transform opponentPlayer)
{
Quaternion targetRotation = Quaternion.identity;
do
{
Debug.Log("do rotation");
Vector3 targetDirection = (opponentPlayer.position - transform.position).normalized;
targetRotation = Quaternion.LookRotation(targetDirection);
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, Time.deltaTime);
yield return null;
} while (Quaternion.Angle(transform.rotation, targetRotation) < 0.01f);
}
坦克物体前进方向:
Time.deltaTime
是一个不合适的 lerp 参数。相反,定义一个float rotationSpeed
并使用rotationSpeed * Time.deltaTime
as the maxDegreesDelta
论证Quaternion.RotateTowards https://docs.unity3d.com/ScriptReference/Quaternion.RotateTowards.html.
另外,使用LookRotation
这样会给你一个世界空间旋转。所以你应该将你的结果分配给transform.rotation
代替transform.localRotation
.
总而言之,这些更改可能如下所示:
public float rotationSpeed;
IEnumerator DoRotationAtTargetDirection(Transform opponentPlayer)
{
Quaternion targetRotation = Quaternion.identity;
do
{
Debug.Log("do rotation");
Vector3 targetDirection = opponentPlayer.position - transform.position;
targetRotation = Quaternion.LookRotation(targetDirection);
Quaternion nextRotation = Quaternion.RotateTowards(
transform.rotation, targetRotation, rotationSpeed * Time.deltaTime);
transform.rotation = nextRotation;
yield return null;
} while (Quaternion.Angle(transform.rotation, targetRotation) > 0.01f);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)