unity3d navmesh 通过切换界面没有了

2015年01月28日 13:54 0 点赞 1 评论 更新于 2025-11-21 15:39

在以往的项目开发中,尤其是使用寻路组件时,经常会遇到 Unity3D NavMesh 在切换界面后消失的问题。接下来,我将详细分析这个问题的原因,并给出相应的解决方案。

Unity3D 寻路组件概述

与 U3D 以前的大多数优化组件类似,Nav 组件在设置好寻路网格和寻路对象之后,需要进行 Bake 操作。U3D 内置的寻路组件主要分为两大类:NavMesh 和 NavMeshAgent。其中,NavMesh 用于设置寻路网络,而 NavMeshAgent 用于设置寻路的对象。

NavMesh 公开方法及变量

公开方法

  • Raycast:跟踪 NavMesh 上两个点之间的射线。
  • CalculatePath:计算两点之间的路径并存储该路径。
  • DistanceToEdge:找到一个点到 NavMesh 边缘的最近距离。
  • SamplePosition:获取指定点最接近的 NavMesh 位置。
  • SetLayerCost:设置所有代理类型在某一层上进行几何遍历的成本。
  • GetLayerCost:获取所有代理类型在某一层上进行几何遍历的成本。
  • GetNavMeshLayerFromName:返回指定名称层的索引。

继承变量

  • name:对象的名称。
  • hideFlags:用于判断对象是否被隐藏,以及是否会被用户在场景中修改或保存。

继承函数

  • GetInstanceID:返回该对象的实例 ID。
  • ToString:返回游戏对象的名称。

继承类功能

  • operator bool:判断对象是否存在。
  • Instantiate:克隆原始对象并返回克隆体。
  • Destroy:删除游戏物体、组件或资产。
  • DestroyImmediate:立即销毁对象 obj,强烈建议使用此方法而非 Destroy。
  • FindObjectsOfType:返回所有活动且已加载的指定类型对象的列表。
  • FindObjectOfType:返回第一个活动且已加载的指定类型对象。
  • 运算符 ==:比较两个对象是否指向同一个实例。
  • 运算符 !=:比较两个对象是否指向不同的实例。
  • DontDestroyOnLoad:使目标对象在加载新场景时不会被自动销毁。

NavMeshAgent 公开方法及变量

变量

  • destination:导航的目标位置。
  • stoppingDistance:与目标位置保持的停止距离。
  • velocity:NavMeshAgent 组件的当前速度。
  • 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:连接到该游戏物体的 ParticleEmitter 组件(若未连接则为 null)。
  • particleSystem:连接到该游戏物体的 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:立即销毁对象 obj,强烈建议使用此方法而非 Destroy。
  • FindObjectsOfType:返回所有活动且已加载的指定类型对象的列表。
  • FindObjectOfType:返回第一个活动且已加载的指定类型对象。
  • 运算符 ==:比较两个对象是否指向同一个实例。

总结

以上就是关于 Unity3D NavMesh 在切换界面后消失问题的相关分析,以及 NavMesh 和 NavMeshAgent 的详细介绍。希望这些内容能为大家提供参考,帮助大家更好地解决相关问题。