unity Navigation NavMeshObstacle、AreMask、updatePoaition nextPosition

本文介绍了Unity中的NavMeshObstacle组件,如何在无需Collider的情况下创建障碍物。主要内容包括:设置障碍物形状、大小、雕刻选项、移动阈值和静态雕刻等参数。此外,还讲解了Area Mask的配置,动态改变游戏对象的层级,并讨论了导航质量、速度、加速度等关键属性。特别强调了agent.updatePosition和nextPosition的使用,以及在动画和寻路中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将障碍物添加NavMeshObstacle组件,可无需添加Collider组件

Shape:生成的Obstacle形状 

center:控制中心 类似Collider

size:大小  类似Collider

Carve:是否雕刻  只有当勾选此选项后  Player才会重新计算路线,越过此障碍物寻找最近路线,否则,会将Player卡在障碍物位置

MoveThreshold: 移动范围的大小。移动的Obstacle,当移动范围<此数值时,是不会重新计算生成ObstacleMesh的,可根据需求修改此数值

TimeToStationar:时间数值。当移动Obstacle时,延迟多长时间后再生成ObstacleMesh,进行路径计算。

CarveOnlyStatio:当勾选此选项表示只有在障碍物静止下来之后才进行ObstacleMesh的计算

 

Area:设置可通过的层

对应面板中的

Area Mask:游戏对象可通过的网格区域

代码动态设置层级

Unity中将带位移的角色动画在原地运行,可以通过以下几种方法实现: 1. **使用Animator Controller**: - 打开Animator窗口(Window -> Animation -> Animator)。 - 选中你的角色,确保有一个Animator组件。 - 在Animator窗口中,创建一个新的Animator Controller或者使用已有的Animator Controller。 - 将包含位移的动画拖入Animator窗口中。 - 选中动画片段,在Inspector窗口中取消勾选“Apply Root Motion”。这样动画的位移就不会应用到角色的实际位置上了。 2. **使用脚本控制**: - 创建一个新的C#脚本,比如`AnimationController.cs`。 - 在脚本中获取Animator组件,并控制动画的播放。 - 在播放动画时,确保角色的位置不发生变化,可以通过设置角色的位置来实现。 ```csharp using UnityEngine; public class AnimationController : MonoBehaviour { private Animator animator; void Start() { animator = GetComponent<Animator>(); } void Update() { if (Input.GetKeyDown(KeyCode.Space)) { animator.SetTrigger("Jump"); // 确保角色的位置不发生变化 transform.position = new Vector3(0, transform.position.y, 0); } } } ``` 3. **使用IK(Inverse Kinematics)**: - 在Animator窗口中,添IK Pass。 - 在脚本中实现OnAnimatorIK方法,调整角色的位置和旋转,使其在动画播放时保持在原地。 ```csharp using UnityEngine; public class IKController : MonoBehaviour { private Animator animator; void Start() { animator = GetComponent<Animator>(); } void OnAnimatorIK(int layerIndex) { // 保持角色的位置 transform.position = new Vector3(0, transform.position.y, 0); } } ``` 通过以上方法,你可以在Unity中将带位移的角色动画在原地运行,而不会导致角色在实际场景中移动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值