unity3d navmesh 通过切换界面没有了
在使用Unity3D进行开发时,可能会遇到NavMesh通过切换界面后消失的情况。大家是否思考过这一问题产生的原因,或者发现问题后却不知如何解决?下面,我们将详细介绍NavMesh的相关内容。
从A*插件到Unity3D自带寻路组件
以前在制作寻路功能时,开发者常常借助A*插件。不过,如今的Unity3D已经可以使用其自带的寻路组件,且使用起来简单明了。 和Unity3D以前的大多数优化组件类似,NavMesh需要在设置好寻路网格和寻路对象之后进行烘焙(Bake)操作。Unity3D内置的寻路组件主要分为两大类: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:NavMesh代理组件的当前速度。
- nextPosition:路径上的下一个位置。
- remainingDistance:当前路径上的剩余距离。
- baseOffset:拥有游戏物体的相对垂直位移。
- isOnOffMeshLink:指示代理当前是否位于OffMeshLink上。
- autoTraverseOffMeshLink:自动在OffMeshLink上进行移动和离开操作。
- 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:启用或禁用Behaviours的更新。
- 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:返回游戏对象的名称。
继承类的功能
- operator bool:判断对象是否存在。
- Instantiate:克隆原始对象并返回克隆体。
- Destroy:删除一个游戏物体、组件或资产。
- DestroyImmediate:立即销毁对象obj,强烈建议使用此方法而非Destroy。
- FindObjectsOfType:返回所有活动加载的指定类型对象的列表。
- FindObjectOfType:返回第一个活动加载的指定类型对象。
- 运算符==:比较两个对象是否指向同一个对象。 好了,关于Unity3D NavMesh通过切换界面消失的内容讲解就到这里,接下来需要大家自行深入理解和探索。