Hel*_*ium 17 artificial-intelligence unity-game-engine navmesh
我与我的导航网格代理挣扎的同时有计算路径无效obvisously没有理由.当问题已经以初始有效路径移动时,问题会不时发生.
在上图中,目的地是左上角的圆锥体.(不要介意NavMeshAgent的方向箭头,我试图用手移动代理,以试图"解锁"他)
检查目的地是否在NavMesh上
public Vector3 GetCharacterPositionOnNavMesh( Vector3 position )
{
NavMeshHit hit;
bool positionFound = NavMesh.SamplePosition( position, out hit, 500, NavMesh.AllAreas );
if ( !positionFound )
Debug.LogWarning( "No valid position found !" );
return positionFound ? hit.position : position;
}
Run Code Online (Sandbox Code Playgroud)检查我的代理的区域掩码,以确保他们可以找到目的地的路径,尽管NavMesh的各个区域
如果代理的路径无效,则几乎检查每个帧.如果是,请使用CalculatePath
或计算新的SetDestination
.有时,它有效,有时不行.
protected virtual void Update()
{
if ( !Running || !agent.enabled || !agent.isOnNavMesh )
return;
if ( !agent.pathPending && agent.path.status == NavMeshPathStatus.PathInvalid && Time.frameCount % 2 == 0 )
{
NavMeshPath path = new NavMeshPath();
agent.CalculatePath( CharactersManager.Instance.GetCharacterPositionOnNavMesh( finalDestination ), path );
agent.SetPath( path );
}
}
Run Code Online (Sandbox Code Playgroud)禁用整个场景中的所有NavMeshObstacle(我的代理没有任何NavMeshObstacle,也没有他们的孩子)
在初始位置和最终目的地之间添加更多步骤
禁用代理的AutoRepath属性
注意:当另一个代理推送我的第一个代理时,后者似乎醒来并找到它的路径.
归档时间: |
|
查看次数: |
2620 次 |
最近记录: |