Unity 人物如何跟隨滑鼠轉向 ScreenPointToRay RaycastHit Raycast transform.LookAt
阿新 • • 發佈:2019-02-11
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射線與地面碰撞後得到的碰撞點座標
最終就實現了人物跟隨滑鼠轉向的功能。