Unity3D 人脸对象移动的地方
Unity3D face object where its moving
所以我做了一个和你一起飞行的伴侣,它运行良好:
this.transform.position = Vector3.Lerp(transform.position, player.transform.position + offset, speed * Time.deltaTime);
但现在这是它开始的地方......目前我正在使用它,但我希望对象在移动的地方旋转:
this.transform.LookAt(player, Vector3.up);
非常感谢您的回答。
祝你有愉快的一天。
托比胡迪
您可以使用一些矢量数学来做到这一点。存储同伴之前的位置,然后使用新的目标位置来确定方向向量。代码可能类似于:
private void Update()
{
// store our prev location
Vector3 prevLocation = this.transform.position;
// update the position as you are already doing
this.transform.position = Vector3.Lerp(transform.position, player.transform.position + offset, speed * Time.deltaTime);
// now calculate our direction using the targetLoc - prevLoc
// assure to normalize so we have a non scaled vector, which is just a direction
Vector3 newDir = (this.transform.position - prevLocation).normalized;
// assign the rotation of our object to the direction we are now moving
this.transform.rotation = Quaternion.LookRotation(newDir);
}
以上代码段未经测试,但基于 Quaternion.LookRotation
文档,因此它应该按预期工作。
所以我做了一个和你一起飞行的伴侣,它运行良好:
this.transform.position = Vector3.Lerp(transform.position, player.transform.position + offset, speed * Time.deltaTime);
但现在这是它开始的地方......目前我正在使用它,但我希望对象在移动的地方旋转:
this.transform.LookAt(player, Vector3.up);
非常感谢您的回答。
祝你有愉快的一天。
托比胡迪
您可以使用一些矢量数学来做到这一点。存储同伴之前的位置,然后使用新的目标位置来确定方向向量。代码可能类似于:
private void Update()
{
// store our prev location
Vector3 prevLocation = this.transform.position;
// update the position as you are already doing
this.transform.position = Vector3.Lerp(transform.position, player.transform.position + offset, speed * Time.deltaTime);
// now calculate our direction using the targetLoc - prevLoc
// assure to normalize so we have a non scaled vector, which is just a direction
Vector3 newDir = (this.transform.position - prevLocation).normalized;
// assign the rotation of our object to the direction we are now moving
this.transform.rotation = Quaternion.LookRotation(newDir);
}
以上代码段未经测试,但基于 Quaternion.LookRotation
文档,因此它应该按预期工作。