首页 > 解决方案 > NPC 穿墙而过

问题描述

我目前正在开发一个战术角色扮演游戏,并且我设置了墙壁以防止 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);

我读过这种移动方式可能会导致问题。那正确吗?

标签: c#unity3d

解决方案


如果你有一个Rigidbody附加到你的 GameObject,你应该使用它来移动它,而不是Transform,因为它是 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;
    }
}

由于我们使用物理来移动游戏对象,因此逻辑必须放在FixedUpdate中。


推荐阅读