一、思路:
在3D場景中,通過鼠標點擊“地面”獲取位置信息來使玩家進行橫向相對運動。
1、在場景中創建一個Plane作爲地面。
2、使用射線檢測分別記錄第一次鼠標點擊(Input.GetMouseButtonDown(0))時的位置信息和鼠標按下(Input.GetMouseButton(0))劃過的每個點信息。
3、計算鼠標滑動的偏移量,賦值給玩家,使玩家獲得相應的橫向移動距離。
二、代碼:
1、定義屬性:
/// <summary>
/// 鼠標滑動距離
/// </summary>
Vector3 dis;
/// <summary>
/// 鼠標第一次點擊時的位置信息
/// </summary>
private Vector3 MouseDownPos = Vector3.zero;
/// <summary>
/// 玩家位置
/// </summary>
Transform movingPlayer;
2、實現(Update):
(代碼中設置Layer層是爲了避免一些錯誤點擊導致誤移動了玩家)
private void HandleInput()
{
//當按下鼠標左鍵時
if (Input.GetMouseButtonDown(0))
{
//從鼠標位置發射一條射線,
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//判斷當射線射到layer層爲“groundLayer”時
if (Physics.Raycast(ray, out RaycastHit hit, 100, groundLayer))
{
//記錄點位置信息
MouseDownPos = hit.point;
}
}
//當按住鼠標左鍵時
if (Input.GetMouseButton(0))
{
//從鼠標位置發射一條射線,
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//判斷當射線射到layer層爲“groundLayer”時
if (Physics.Raycast(ray, out RaycastHit hit, 100, groundLayer))
{
//獲取滑動的距離
dis = hit.point - MouseDownPos;
//用playerPos來保存玩家移動後的位置信息
Vector3 playerPos = movingPlayer.position + dis;
//這個if語句用來判斷邊界限制(如果有需要的話)。
if (true)
{
//修改最終玩家移動位置
movingPlayer.position = playerPos;
}
//**將鼠標按下起始點修改爲當前玩家位置
MouseDownPos = hit.point;
}
}
}
有更好的方法歡迎指點。
如果對你有幫助,酌情打賞~