我正在研究一个使用NavMeshAgent的研究项目。我目前有一个非常简单的场景,其中代理在开始时产生,穿过“入口”触发器对撞机,“退出”触发器对撞机,然后最终与“驱逐舰”触发器对撞机与结束场景的脚本碰撞。没有什么复杂的,不应该发生物理碰撞。
我一直在编辑器和-batchmode -nographics
中运行一些模拟,通过可执行文件记录场景结束时的基本运行时统计信息。我发现在Unity编辑器和CLI执行中偶尔会出现场景的执行时间。我终于抓住了行动中发生的事情 - NavMeshAgent组件与我的代理脱离并在其前面浮出水面。
在这张照片中,你可以看到代理上的两个碰撞器(一个非常小的通过他的身体为物理,一个更大的为他的“个人空间”),出口触发器对撞机(右边巨大的红色框),并在这两个是一个胶囊状的NavMeshAgent组件。
我使用this unity page详细介绍了如何使用动画师使用NavMeshAgents,但在重新创建他们推荐的设置之后,我仍然遇到了问题。
有没有人有任何解决方案将NavMeshAgent锚定到代理本身?
我遇到了完全相同的问题,其中使NavMeshAgent
组件成为一个孩子,并在每个帧中设置NavMeshAgent
的本地位置解决了这个问题。
private NavMeshAgent agent;
void Awake()
{
agent = gameObject.GetComponentInChildren<NavMeshAgent>();
anim = gameObject.GetComponent<Animator> ();
}
private void Update()
{
agent.transform.localPosition = Vector3.zero;
// todo:
// set animator
}
void OnAnimatorMove ()
{
// Update position to agent position
transform.position = agent.nextPosition;
}