1. 程式人生 > >Unity 人物如何跟隨滑鼠轉向 ScreenPointToRay RaycastHit Raycast transform.LookAt

Unity 人物如何跟隨滑鼠轉向 ScreenPointToRay RaycastHit Raycast transform.LookAt

1. 預期效果

像這樣,紅色箭頭是我當時滑鼠的位置

這裡寫圖片描述
這裡寫圖片描述

2. 程式碼實現

這裡寫圖片描述

3. API分析

1)指定Camera,向滑鼠點選處發ray射線

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

(1)Camera.main用於指定某個Camera,Camera.main就表示Tag為MainCamera的Camera↓

這裡寫圖片描述

(2)該行程式碼的作用是獲取一條Ray射線,它從Tag為MainCamera的Camera座標點出發,射向Mouse點選座標點方向,如下圖所示↓
其中返回值ray所包含的資訊是Ray( Vector3 (起始點座標), Vector3 (射線方向) ),Ray是無限長的

這裡寫圖片描述

2)投射獲取的射線到地面上,獲取碰撞點資訊

RaycastHit hitInfo;
        if (Physics.Raycast(ray, out hitInfo, 200, groundLayerIndex)) {
            Vector3 target = hitInfo.point;
            target.y = transform.position.y;
            transform.LookAt(target);
        }

(1)說明下Physics.Raycast方法

Physics.Raycast(
ray
[投射射線的起點和方向], out hitInfo[獲取的碰撞點資訊], 200[射線的長度], groundLayerIndex[設定碰撞器所在的LayerMask層]

(2)投射ray射線後,如果撞到碰撞器的話,Physics.Raycast會返回一個true。根據我們的設定,它應該撞到了地上,這樣就獲取了一個RaycastHit型別的hitInfo,它包含了碰撞點的以下資訊

這裡寫圖片描述

(3)我們使用hitInfo.point獲取碰撞點的座標,忽略y軸座標,使它和主角的y座標保持一致。

3)使人物面朝射線與地面的碰撞點

transform.LookAt(target);

由2)知道,target是ray射線與地面碰撞後得到的碰撞點座標

(ray射線從MainCamera的座標點出發,射向Mouse點選座標點方向),而transform.LookAt(target)方法的作用是“旋轉物體使z軸指向target”

最終就實現了人物跟隨滑鼠轉向的功能。