Unity實現鼠標滑動控制物體移動

一、思路:

在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;
      }
    }
  }

有更好的方法歡迎指點。

如果對你有幫助,酌情打賞~

在這裏插入圖片描述 在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章