我目前正在开发一款战术RPG游戏,为了防止NPC在游戏区域外移动,我设置了墙壁。然而,NPC却在墙壁中移动。他有一个刚体,一个箱子碰撞器连接到他身上,他被触发。此外,使用重力选项和运动学也被标记。墙壁上有一个刚体和一个箱式对撞机,它们没有被触发。它们没有被触发。
我正在使用这段代码来移动NPC。
targetPosition.y = 1.4f;
targetPosition.x = this.transform.position.x + 3;
targetPosition.z = this.transform.position.z;
this.transform.position = Vector3.MoveTowards(transform.position, targetPosition, velocity);
我读到这样的移动方式可能会导致问题的出现。是这样吗?
如果你有一个 刚体 附在你的GameObject上,你应该用它来移动它,而不是用它的 转变因为是Rigidbody与物理引擎对话并负责同步位置。在这种情况下,适当的函数应该是 Rigidbody.MovePosition.
using UnityEngine;
using System.Collections;
using System.Collections.Generics;
public class NPC: MonoBehaviour
{
[SerializeField] private float speed = 5f;
[SerializeField] private Rigidbody rigidbody;
void FixedUpdate()
{
rigidbody.MovePosition(rb.position + new Vector3(3f, 0f, 0f) * speed * Time.fixedDeltaTime;
}
}
由于我们使用物理学来移动GameObject,所以逻辑必须放在 固定更新.