我目前正在开发一个战术RPG,我已经设置了围墙,以防止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);我读到过这种移动方式可能会导致这个问题。是那么回事吗?
发布于 2020-05-12 04:56:10
如果你的GameObject上连接了Rigidbody,你应该用它来移动它,而不是Transform,因为它是刚体与物理引擎对话并负责同步位置。在这个场景中,适当的函数应该是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,所以逻辑必须放在FixedUpdate中。
https://stackoverflow.com/questions/61731488
复制相似问题