最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
unity3d navmesh 通过切换界面没有了
在使用 Unity3D 进行开发时,你是否遇到过 NavMesh 在切换界面后消失的情况?是否思考过问题出在哪里,又不知如何解决?接下来,我们将详细探讨 NavMesh 的相关内容。
从 A* 插件到 Unity3D 自带寻路组件
以前在实现寻路功能时,开发者常常借助 A* 插件。不过,如今 Unity3D 已经提供了自带的寻路组件,使用起来非常简单明了。和 Unity3D 以往的大多数优化组件类似,Nav 组件需要在设置好寻路网格和寻路对象之后进行烘焙(Bake)操作。
Unity3D 内置寻路组件分类
Unity3D 内置的寻路组件主要分为两大类:NavMesh 和 NavMeshAgent。前者用于设置寻路网络,后者用于设置寻路的对象。
NavMesh 公开方法及相关属性
公开方法
- Raycast:跟踪 NavMesh 上两点之间的射线。
- CalculatePath:计算两点之间的路径并存储路径信息。
- DistanceToEdge:查找一个点到 NavMesh 边缘的最近距离。
- SamplePosition:获取距离指定点最近的 NavMesh 位置。
- SetLayerCost:设置所有代理类型在某一层几何表面上的遍历成本。
- GetLayerCost:获取所有代理类型在某一层几何表面上的遍历成本。
- GetNavMeshLayerFromName:返回指定名称层的索引。
继承的变量
- name:对象的名称。
- hideFlags:用于判断对象是否被隐藏,以及是否会在场景保存时被修改。
继承的函数
- GetInstanceID:返回该对象的实例 ID。
- ToString:返回游戏对象的名称。
继承类的功能
- operator bool:判断对象是否存在。
- Instantiate:克隆原始对象并返回克隆体。
- Destroy:删除游戏物体、组件或资产。
- DestroyImmediate:立即销毁对象,强烈建议使用此方法而非
Destroy。 - FindObjectsOfType:返回所有已加载的指定类型的活动对象列表。
- FindObjectOfType:返回第一个已加载的指定类型的活动对象。
- 运算符 ==:比较两个对象是否指向同一个实例。
- 运算符 !=:比较两个对象是否指向不同的实例。
- DontDestroyOnLoad:确保对象在加载新场景时不会被自动销毁。
NavMeshAgent 公开方法及相关属性
变量
- destination:导航的目标位置。
- stoppingDistance:距离目标位置多远时停止移动。
- velocity:NavMesh 代理组件的当前速度。
- nextPosition:路径上的下一个位置。
- remainingDistance:当前路径上的剩余距离。
- baseOffset:拥有该代理的游戏物体的相对垂直位移。
- isOnOffMeshLink:判断代理是否位于 OffMeshLink 上。
- autoTraverseOffMeshLink:是否自动在 OffMeshLinks 上移动。
- autoRepath:当现有路径无效时,是否尝试获取新路径。
- hasPath:判断代理当前是否有路径。
- pathPending:路径是否正在计算中,尚未准备好。
- isPathStale:判断当前路径是否陈旧。
- pathStatus:查询当前路径的状态。
- walkableMask:指定哪些 NavMesh 层是可行走的(位域),更改此值会使路径变为陈旧状态(可通过
isPathStale判断)。 - speed:最大移动速度。
- angularSpeed:最高旋转速度(度/秒)。
- acceleration:最大加速度。
- updatePosition:代理是否更新变换位置。
- updateRotation:代理是否更新变换方向。
- radius:代理的半径。
- height:代理的高度。
- obstacleAvoidanceType:避障质量水平。
功能
- SetDestination:设置或更新目标位置,这将触发新的路径计算。
- ActivateCurrentOffMeshLink:启用或禁用当前的 OffMeshLink。
- GetCurrentOffMeshLinkData:提取当前 OffMeshLink 的状态信息。
- GetCurrentOffMeshLinkGameObject:获取当前 OffMeshLink 对应的游戏对象引用。
- CompleteOffMeshLink:终止当前的 OffMeshLink。
- Move:在当前位置应用相对运动。
- Stop:停止代理沿着当前路径的运动。
- Resume:恢复代理沿着当前路径的运动。
- ResetPath:清除当前路径,注意,在调用
SetDestination之前,代理将开始寻找新的路径。 - SetPath:指定代理的路径。
- DistanceToEdge:查找最近的 NavMesh 边缘。
- Raycast:在 NavMesh 上跟踪到目标位置的运动,但不移动代理。
- SamplePathPosition:采样当前路径上的位置。
- SetLayerCost:设置某一层类型几何表面的遍历成本。
- GetLayerCost:获取某一层类型几何表面的遍历成本。
继承的成员
继承的变量
- enabled:启用或禁用行为更新。
- transform:连接到该游戏物体的变换组件(若未连接则为 null)。
- rigidbody:连接到该游戏物体的刚体组件(若未连接则为 null)。
- camera:连接到该游戏物体的相机组件(若未连接则为 null)。
- light:连接到该游戏物体的灯光组件(若未连接则为 null)。
- animation:连接到该游戏物体的动画组件(若未连接则为 null)。
- constantForce:连接到该游戏物体的 ConstantForce 组件(若未连接则为 null)。
- renderer:连接到该游戏物体的渲染器组件(若未连接则为 null)。
- audio:连接到该游戏物体的 AudioSource 组件(若未连接则为 null)。
- guiText:连接到该游戏物体的 GUIText 组件(若未连接则为 null)。
- networkView:连接到该游戏物体的 NetworkView 组件(只读,若未连接则为 null)。
- guiTexture:连接到该游戏物体的 GUITexture 组件(只读,若未连接则为 null)。
- collider:连接到该游戏物体的碰撞器组件(若未连接则为 null)。
- hingeJoint:连接到该游戏物体的 HingeJoint 组件(若未连接则为 null)。
- particleEmitter:连接到该游戏物体的粒子发射器组件(若未连接则为 null)。
- particleSystem:连接到该游戏物体的粒子系统组件(若未连接则为 null)。
- GameObject:该组件所连接的游戏对象,组件始终连接到一个游戏对象。
- tag:该游戏对象的标签。
- name:对象的名称。
- hideFlags:判断对象是否被隐藏,以及是否会在场景保存时被修改。
继承的函数
- GetComponent:若对象上附着有指定类型的组件,则返回该组件;否则返回 null。
- GetComponentInChildren:使用深度优先搜索,返回游戏物体或其任何子物体上指定类型的组件。
- GetComponentsInChildren:返回游戏物体或其任何子物体上所有指定类型的组件。
- GetComponents:返回游戏物体上所有指定类型的组件。
- CompareTag:判断游戏对象的标签是否与指定标签匹配。
- SendMessageUpwards:在该游戏对象及其所有祖先的每个 MonoBehaviour 中调用指定名称的方法。
- SendMessage:在该游戏对象的每个 MonoBehaviour 中调用指定名称的方法。
- BroadcastMessage:在该游戏对象及其所有子物体的每个 MonoBehaviour 中调用指定名称的方法。
- GetInstanceID:返回该对象的实例 ID。
- ToString:返回游戏对象的名称。
继承类的功能
- 运算符 BOOL:判断对象是否存在。
- Instantiate:克隆原始对象并返回克隆体。
- Destroy:删除游戏物体、组件或资产。
- DestroyImmediate:立即销毁对象,强烈建议使用此方法而非
Destroy。 - FindObjectsOfType:返回所有已加载的指定类型的活动对象列表。
- FindObjectOfType:返回第一个已加载的指定类型的活动对象。
- 运算符 ==:比较两个对象是否指向同一个实例。
以上就是关于 Unity3D NavMesh 的详细内容,希望大家能通过这些信息更好地理解和使用 NavMesh。对于 NavMesh 在切换界面后消失的问题,大家可以结合上述知识进行深入分析和排查。接下来,就需要大家自己去实践和理解这些内容了。