NPC穿墙而过

问题描述 投票:1回答:1

我目前正在开发一款战术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);

我读到这样的移动方式可能会导致问题的出现。是这样吗?

c# unity3d
1个回答
2
投票

如果你有一个 刚体 附在你的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,所以逻辑必须放在 固定更新.

© www.soinside.com 2019 - 2024. All rights reserved.