上圖擷取自Unity官方教學專案Survival Shooter |
一、
簡略寫法:
在Update方法中建立一無垠的、虛擬的、y軸向上的平面,並使用Plane類別下的Raycast方法獲得滑鼠在該平面上的交點:
Ray ray = viewCamera.ScreenPointToRay(Input.mousePosition); //須先宣告一Camera物件 float rayDistance; Plane groundPlane = new Plane(Vector3.up, Vector3.zero); if(groundPlane.Raycast(ray, out rayDistance)) { Vector3 point = ray.GetPoint(rayDistance); Vector3 lockTransformRotation = new Vector3(point.x, transform.position.y, point.z); transform.LookAt(lockTransformRotation); }
二、
進一步之寫法:
主要於FixedUpdate方法中撰寫,使用Physics.Raycast於Camera射出射線,檢查射線與場景上實體平面的焦點,將角度儲存為Quaternion,套用於Rigidbody組件上:
首先宣告變數並於Awake中取得Mask:
int floorMask; float camRayLength = 100f; //射線長度 void Awake () { floorMask = LayerMask.GetMask ("Floor"); }
記得在場景上的平面設置為Floor Layer,以在程式中利用該Layer之LayerMask(遮罩)。
void FixedUpdate() { Ray ray = viewCamera.ScreenPointToRay(Input.mousePosition); //須先宣告一Camera物件 RaycastHit floorHit; if(Physics.Raycast (ray, out floorHit, camRayLength, floorMask)) { Vector3 playerOrientationToMouse = floorHit.point - transform.position; playerOrientationToMouse .y = 0f; Quaternion newRotatation = Quaternion.LookRotation (playerOrientationToMouse ); myRigidbody.MoveRotation (newRotatation); } }
以上參考自官方Survival Shooter 學習專案,有錯敬請不吝指正。
沒有留言:
張貼留言