首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何阻止NavMeshAgent从Animator中分离?

如何阻止NavMeshAgent从Animator中分离?
EN

Stack Overflow用户
提问于 2018-03-02 09:03:23
回答 1查看 659关注 0票数 0

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

我已经在编辑器和-batchmode -nographics中通过一个可执行文件运行了一些模拟,该可执行文件在场景结束时记录基本的运行时统计信息。我发现在Unity编辑器和CLI执行中,场景的执行时间偶尔会达到峰值。我最终发现了实际发生的事情-- NavMeshAgent组件从我的代理中分离出来,漂浮在它的前面。

在这张图片中,你可以看到智能体上的两个对撞机(一个非常小的穿过他的身体用于物理,另一个较大的用于他的“个人空间”),退出触发对撞机(右侧的巨大红色框)和漂浮在两者之间的是一个胶囊形状的NavMeshAgent组件。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-02 11:56:26

我遇到了完全相同的问题,将NavMeshAgent组件设为子组件并在每个帧中设置NavMeshAgent的本地位置就解决了这个问题。

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49061205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档