使用Line Renderer只顯示路徑不移動效果
阿新 • • 發佈:2019-01-11
首先建立一個烘焙過後的場景,這個比較容易,簡單說一下
建立需要的場景,我這裡是測試
設定為Static型別
點選 Bake
接下來給Player掛指令碼 MoveCube
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; public class MoveCube : MonoBehaviour { NavMeshAgent m_nav; LineRenderer m_line; Ray ray; RaycastHit hit; Vector3 vector3; private void Awake() { m_nav = GetComponent<NavMeshAgent>(); m_line = GetComponent<LineRenderer>(); m_line.enabled = false; } private void Start() { StartCoroutine(OnMouseDown()); } private void Update() { if (Input.GetMouseButtonDown(0)) { //啟用線性渲染元件 m_line.enabled = true; ray = Camera.main.ScreenPointToRay(Input.mousePosition);//從攝像機發射射線到螢幕,並返回這條射線。 if (Physics.Raycast(ray, out hit)) { vector3 = hit.point; NavMeshPath path = new NavMeshPath();//設定路徑的點 m_nav.CalculatePath(vector3, path);//路徑,導航 //m_line.SetVertexCount(path.corners.Length); 過時的,API查詢 m_line.positionCount = path.corners.Length;//線性渲染設定拐點數。陣列型別的 m_line.SetPositions(path.corners); //m_nav.SetDestination(vector3); } } } IEnumerator OnMouseDown() { //將物體由世界座標系轉換為螢幕座標系 Vector3 screenSpace = Camera.main.WorldToScreenPoint(transform.position);//三維物體座標轉螢幕座標 //完成兩個步驟 1.由於滑鼠的座標系是2維,需要轉換成3維的世界座標系 // // 2.只有3維座標情況下才能來計算滑鼠位置與物理的距離,offset即是距離 //將滑鼠螢幕座標轉為三維座標,再算出物體位置與滑鼠之間的距離 Vector3 offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z)); while (Input.GetMouseButton(0)) { //得到現在滑鼠的2維座標系位置 Vector3 curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z); //將當前滑鼠的2維位置轉換成3維位置,再加上滑鼠的移動量 Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset; //curPosition就是物體應該的移動向量賦給transform的position屬性 transform.position = curPosition; yield return new WaitForFixedUpdate(); //這個很重要,迴圈執行 } } }
接下來給Player新增元件。
這裡LineRenderer在設定的時候有個坑,預設設定LineRenderer----->Positions
這樣的話,在場景執行時,不會顯示LineRenderer初始的那小段
執行。
效果如下
這裡有一個問題,就是再次移動Plyer的時候,射線會穿透Plyer在地面上留下一個點,如下圖:
解決辦法:有待解決,各位大佬,有解決方案留下你的思路,謝謝
等我想出來辦法在來更新