如何阻止NavMeshAgent与Animator分离?

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

我正在研究一个使用NavMeshAgent的研究项目。我目前有一个非常简单的场景,其中代理在开始时产生,穿过“入口”触发器对撞机,“退出”触发器对撞机,然后最终与“驱逐舰”触发器对撞机与结束场景的脚本碰撞。没有什么复杂的,不应该发生物理碰撞。

我一直在编辑器和-batchmode -nographics中运行一些模拟,通过可执行文件记录场景结束时的基本运行时统计信息。我发现在Unity编辑器和CLI执行中偶尔会出现场景的执行时间。我终于抓住了行动中发生的事情 - NavMeshAgent组件与我的代理脱离并在其前面浮出水面。

NavMeshAgent detached from Animator

在这张照片中,你可以看到代理上的两个碰撞器(一个非常小的通过他的身体为物理,一个更大的为他的“个人空间”),出口触发器对撞机(右边巨大的红色框),并在这两个是一个胶囊状的NavMeshAgent组件。

我使用this unity page详细介绍了如何使用动画师使用NavMeshAgents,但在重新创建他们推荐的设置之后,我仍然遇到了问题。

有没有人有任何解决方案将NavMeshAgent锚定到代理本身?

unity3d unity5
1个回答
1
投票

我遇到了完全相同的问题,其中使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;
}
© www.soinside.com 2019 - 2024. All rights reserved.