【Unity 3D學習】滑鼠點選控制人物移動到目標位置
阿新 • • 發佈:2019-02-19
一、第一種情況,不帶自動尋路功能。
二、第二種情況,加上自動尋路技術。Vector3 targetPoint = Vector3.zero; //滑鼠點選的位置 CharacterController controller; void Start () { targetPoint = transform.position; controller = GetComponent<CharacterController>(); } void Update () { if (Input.GetMouseButton (0)) { Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { //判斷點選的是否地形 if (!hit.collider.name.Equals("Plane")) { return; } //點選位置座標 targetPoint = hit.point; //轉向 transform.LookAt(new Vector3(targetPoint.x, transform.position.y, targetPoint.z)); } } float distance = Vector3.Distance(targetPoint,transform.position);//計算目標位置到當前位置 if(distance > 0.3f) { controller.SimpleMove(transform.forward * 5f);//角色移動 } }
Vector3 targetPoint = Vector3.zero; //滑鼠點選的位置 NavMeshAgent agent; bool flag = false; //控制到達目的地後輸出一次提示 void Start () { targetPoint = transform.position; agent = GetComponent<NavMeshAgent>(); } void Update () { if (Input.GetMouseButton (0)) { flag = false; Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { //判斷點選的是否地形 if (!hit.collider.name.Equals("Plane")) { return; } //點選位置座標 targetPoint = hit.point; //轉向 transform.LookAt(new Vector3(targetPoint.x, transform.position.y, targetPoint.z)); //設定尋路的目標點 agent.SetDestination(targetPoint); agent.speed = 4f; } } if (agent.remainingDistance == 0 && !flag) { flag = true; print ("到達了"); } }
三、記錄一些遇到的問題。
1、使用第一種方式的時候,需要去掉元件“Nav Mesh Agent”,否則滑鼠點選了但是物體不移動,原因待查明。
2、每為一個物體加上元件“Nav Mesh Agent”的時候,都需要重新對地形烘焙一次,否則會出現編譯錯誤,“SetDestination can only be called on an active agent that has been placed on a navmesh”。