首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NavMeshAgent.SetDestination Y轴问题

NavMeshAgent.SetDestination Y轴问题
EN

Stack Overflow用户
提问于 2020-06-30 21:40:38
回答 2查看 371关注 0票数 1

我正在尝试为GameObjects创建简单的移动AI。

每个GameObject都有NavMeshAgent

代码语言:javascript
运行
复制
Vector3 destination = new Vector3(Random.Range(-walkArea, walkArea), 0, Random.Range(-walkArea, walkArea));
navAgent.SetDestination(destination);

这就是我想要做的。但我烤制的地面不平坦,可能有30-40个Y轴。

所以如果GameObject周围有山,他就会被困住,不能爬过去。

我能做些什么呢?如果我只使用navAgent.Move(destination),一切都会正常工作。GameObject在X-Z位置上传送,不用担心Y轴。

我如何使用SetDestination做同样的事情

EN

回答 2

Stack Overflow用户

发布于 2020-06-30 22:29:14

我找到了解决方案。

在main GameObject中,我使用NavMeshAgent创建了empty gameobject

代码语言:javascript
运行
复制
Vector3 destination = new Vector3(Random.Range(-walkArea, walkArea), 0, Random.Range(-walkArea, walkArea));
navDestinationObject.Move(destination);
navAgent.destination = navDestinationObject.transform.position;

navDestinationObject.Move上获得正确的Y轴,然后我们只需将主GameObject移动到navDestinationObject位置。

但我认为一定有更好的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2021-05-17 23:31:59

通过强制转换Ray来获取地面y,其中groundLayerMask是地面的LayerMask,以防止行为不端。

代码语言:javascript
运行
复制
public void WalkTo(Vector3 position)
{
    Physics.Raycast(position + Vector3.up * 64, Vector3.down, out RaycastHit hit, 128, groundLayerMask);
    position.y = hit.y;
    navAgent.SetDestination(position);
}

因此,我们从该位置上方的64个单位投射光线,以找到地面y,然后手动设置它。( RaycastHit是结构体,因此如果没有命中,y将为0。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62658807

复制
相关文章

相似问题

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