如何解决AI跟随并朝向玩家旋转
我的脚本有问题,我想要我的敌人,跟随并转向玩家。在他四处走动的时候。 看起来效果不错,但是当我的播放器在 y 上旋转 180 度时,我的敌人似乎退回了很多(他的位置),只有当我的播放器恢复正常旋转时,敌人似乎又回来了。 我做错了什么?
public class EnemyTesting : MonoBehavIoUr
{
public GameObject player;
public float speed = 1.5f;
public float turnRate;
private void Update()
{
Vector3 toTarget = player.transform.position - transform.position;
float angletoTarget = Vector3.Angle(transform.forward,toTarget);
Vector3 turnAxis = Vector3.Cross(transform.forward,toTarget);
transform.RotateAround(transform.position,turnAxis,Time.deltaTime * turnRate * angletoTarget);
transform.Translate(toTarget * speed * Time.deltaTime);
}
解决方法
“返回”我理解的是旋转,而不是位置。 我认为你的问题是 Vector3.Angle。检查 docs 函数返回两个向量之间的两个可能角度中较小的一个。如果角度大于 180,您需要在代码中处理它以使您的敌人相应地旋转。
编辑:我认为这是由 translate 函数的旋转空间产生的。
在 Space.World
参数中设置 transform.Translate
试试这个:
private void Update() {
Vector3 toTarget = player.transform.position - transform.position;
transform.LookAt(player.transform.position);
transform.Translate(toTarget * speed * Time.deltaTime,Space.World);
}
,
您可以使用 Quaternion.RotateTowards 缓慢地将敌人的方向转向玩家。
这种行为也会使敌人走向它的前向向量,而不是直接朝玩家走。
var towardsPlayer = player.transform.position - transform.position;
transform.rotation = Quaternion.RotateTowards(
transform.rotation,Quaternion.LookRotation(towardsPlayer),Time.deltaTime * turnRate
);
transform.position += transform.forward * speed * Time.deltaTime;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。