问题
我使用Rigidbody和NavMesh创建了一个导航系统。有个探员想跟踪我。它有一个胶囊对撞机、一个脚本(见下文)、一个刚体和一个NavMeshAgent组件。它的工作方式是运行NavMesh计算,获取下一个移动位置的坐标,禁用NavMesh,并使用MovePosition()移动到那里。这个系统通常运行得很好,但是最近我遇到了一些问题。当探员在障碍物周围移动时,它会停在街角上。我相信这是因为我的代码,尤其是我的MovePosition()函数,但我不知道如何修复它。
代码
using UnityEngine;
using UnityEngine.AI;
public class PlayerController : MonoBehaviour
{
public Rigidbody rb;
public float m_Speed = 3f;
public Transform goal;
public NavMeshAgent navMesh;
public float maxSpeed = 5f;
void FixedUpdate()
{
MoveToNextPosition();
}
void MoveToNextPosition()
{
navMesh.enabled = true;
if (navMesh.isOnNavMesh)
{
NavMeshPath path = new NavMeshPath();
if(navMesh.CalculatePath(goal.position, path))
{
navMesh.path = path;
}
}
Vector3 pos = navMesh.steeringTarget;
navMesh.enabled = false;
//Store user input as a movement vector
Vector3 distance = pos - transform.position;
Vector3 direction = distance.normalized;
float speed = rb.velocity.magnitude;
Debug.Log(direction);
rb.MovePosition(transform.position + direction * Time.deltaTime * m_Speed);
}
}发布于 2022-07-19 04:07:13
我有一个很大的清单,什么问题可以与导航网,因此我张贴它作为一个答案:
打开您的导航面板,如果找不到或意外关闭了选项卡,请转到窗口> AI >导航。导航选项卡如下所示:

打开烘焙选项卡,并根据其尺寸设置代理的半径和高度。在底部,单击以展开高级选项。在这种情况下,有一个字段Min Region Area,增加值会增加navmesh代理无法移动的静态障碍物周围的区域。
https://stackoverflow.com/questions/73030551
复制相似问题