赞
踩
将带有 MeshRenderer
和 Collider
组件的地形设置为 Navigation Static
【Navigation Static】在哪里
答:选中地面,在Inspector窗口的最右上角有个Static,点击旁边的倒三角按钮,即可卡看到Navigation Static
确保MeshRenderer
和Collider
是激活状态
然后点击Unity的菜单Window-Navigation,打开Navigation窗口
点击Bake按钮,即可烘焙出路面导航数据,会生成与场景同名的一个文件夹,里面有个NavMesh.asset文件,就是对应的导航资源文件
角色挂上UnityEngine.AI.NavMeshAgent组件,通过SetDestination方法即可实现自动寻路
例子
using System.Collections; using System.Collections.Generic; using UnityEngine; //寻路要引入的命名空间 using UnityEngine.AI; public class NewBehaviourScript : MonoBehaviour { //通过寻路要去找到的 目标物体 public Transform target; //寻路组件 private NavMeshAgent agent; void Start () { //获取寻路物体上的NavMeshAgent组件 agent = GetComponent<NavMeshAgent>(); //通过SetDestination方法(网格路径计算)实现自动寻路 agent.SetDestination(target.position); } }
//MainPlayer.cs 挂在角色的gameobject上 using UnityEngine; using UnityEngine.AI; public class MainPlayer : MonoBehaviour { private NavMeshAgent m_navAgent; private Transform m_selfTrans; private Vector3 m_targetPos; private bool m_isMoving = false; void Awake() { // 给角色挂上NavMeshAgent组件 m_navAgent = gameObject.AddComponent<NavMeshAgent>(); m_selfTrans = transform; } void Update() { if(Input.GetMouseButton(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if(Physics.Raycast(ray, out hit)) { m_targetPos = hit.point; // 自动寻路移动到目标点 m_navAgent.SetDestination(m_targetPos); m_isMoving = true; } } if(Vector3.Distance(m_selfTrans.position, m_targetPos) <= 0.1f) { m_isMoving = false; } } }
如果要实现跳跃效果,跳跃过程中,要把NavMeshAgent给禁用掉,等跳跃结束后再重新激活
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。