使用 AI Navmesh Unity 6,代理无法移动或陷入困境

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

我在导航网格上生成代理,然后将其目的地设置为点数组中的一个点。小黄人的生成看起来像这样:

private void CreateMinion(PlayerNumber player, UnitSO unitData)
{
    Transform[] pathPoints = GetCurrentPlayerPaths((int)player);
    Transform spawn = player == PlayerNumber.Player1 ? P1CreepsSpawn : P2CreepsSpawn;
    GameObject newMinion = Instantiate(unitPrefab, new Vector3(pathPoints[0].position.x, spawn.position.y), Quaternion.identity);
    newMinion.GetComponent<Unit>().minionAttributes = unitData;
    newMinion.GetComponent<Unit>().player = (int)player;
    newMinion.GetComponent<Unit>().playerPath = pathPoints;
    newMinion.GetComponent<NetworkObject>().Spawn(true);
}

然后

OnNetworkSpawn
在小黄人身上,我这样做:

agent.updateRotation = false;
agent.updateUpAxis = false;
agent.speed = minionAttributes.MoveSpeed;

if (NavMesh.SamplePosition(playerPath[pointIndex].position, out NavMeshHit hit, 0.25f, NavMesh.AllAreas))
{
    Debug.Log($"NAV HIT BABY: {hit.position}");
    NavMeshPath path = new NavMeshPath();
    bool yep = agent.CalculatePath(hit.position, path);
    Debug.Log($"Path: {path.status} ({yep})");
    agent.SetDestination(hit.position);
}

这是它们生成时的样子,我设置了它们的目的地(我

Debug.DrawLine
它们的路径为红色): https://gyazo.com/4454aa2018fe86dfca049ec6523bb344

https://gyazo.com/b83f8991a0bd773c97fd5cb7a869ce38

此外,如果运动不是垂直的,则由于某些奇怪的原因似乎没问题: https://gyazo.com/ef588d9579f8c85fedc6377c0335f2c2 一旦他们进入垂直运动,有时他们就会卡在我不知道什么......

如果您需要更多规格,请告诉我。我正在使用 NavMesh Plus 组件。

提前致谢:slight_smile:

unity-game-engine 2d navmesh
1个回答
0
投票

我通过彻底阅读 Navmesh Plus 的 Github 解决了我的问题,发现代理在 Y 轴上移动时存在一些问题,并且您必须在 X 轴上稍微倾斜导航网格才能使其正常工作,如上所述在已知问题中...

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