 |
上圖擷取自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 學習專案,有錯敬請不吝指正。