unity | 为什么使用NavMesh Agent 之后无法跳跃

 

 

 

 

 

 

 

 

 

 

 

为模型加上Nav mesh Agent 之后,相当于把模型置于寻路模式中,模型的跳跃取决于bake的结果,相当于是锁死了Y坐标,只能根据寻路可达的路径进行运动。

一种方法是临时置navmeshagent enabled为false,跳跃后可以再置为true,但是要小心,取消navmesh的时间内,就会发生穿模(穿墙等)情况(原因是本来模型放置在bake之后的地图中,一些不可达的地方,如墙内就不会允许模型到达,但是临时取消的状态下,不可达就将变成可达!!!)

我的解决方案:加上刚体组件,使用施加力或者直接修改刚体速度和角度的方式来驱动模型。


 文章首发于 博客园 yocichen

Unity使用`NavMeshAgent`组件可以使得游戏对象(通常是玩家控制的角色或AI控制的NPC)能够根据导航网格(NavMesh)进行智能寻路。以下是使用`NavMeshAgent`的基本步骤: 1. **创建导航网格**:首先需要为游戏世界生成导航网格。这可以通过选择场景中的地形或模型,然后在Inspector面板中点击`Bake`按钮来完成。这将生成NavMeshNavMesh的生成规则可以通过`Window > AI > Navigation`面板进行配置。 2. **添加NavMeshAgent组件**:将需要进行导航的游戏对象(例如角色)选择,然后点击`Add Component`按钮,在搜索框中输入`NavMeshAgent`并添加。 3. **设置NavMeshAgent参数**:在添加了`NavMeshAgent`组件之后,可以通过Inspector面板调整其参数,如速度(Speed)、加速度(Acceleration)和转向速度(Angular Speed)等。 4. **编写控制脚本**:为了控制角色的移动,需要编写一个脚本来控制`NavMeshAgent`。以下是一个简单的脚本示例: ```csharp using UnityEngine; using UnityEngine.AI; // 引入命名空间 public class CharacterMovement : MonoBehaviour { private NavMeshAgent agent; void Start() { // 获取NavMeshAgent组件 agent = GetComponent<NavMeshAgent>(); } void Update() { // 每帧更新Agent的目标位置 if (Input.GetMouseButtonDown(0)) { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit, 100.0f)) { agent.SetDestination(hit.point); // 设置目的地为鼠标点击的位置 } } } } ``` 5. **附加脚本到游戏对象**:将编写好的脚本附加到你希望进行导航的游戏对象上。 6. **测试导航**:运行游戏并点击游戏视图中的地面,角色应会自动沿着导航网格移动到鼠标点击的位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值