Unity实现鼠标滑动控制物体移动

一、思路:

在3D场景中,通过鼠标点击“地面”获取位置信息来使玩家进行横向相对运动。

1、在场景中创建一个Plane作为地面。
2、使用射线检测分别记录第一次鼠标点击(Input.GetMouseButtonDown(0))时的位置信息和鼠标按下(Input.GetMouseButton(0))划过的每个点信息。
3、计算鼠标滑动的偏移量,赋值给玩家,使玩家获得相应的横向移动距离。

二、代码:

1、定义属性:

  /// 
  /// 鼠标滑动距离
  /// 
  Vector3 dis;
  
  /// 
  /// 鼠标第一次点击时的位置信息
  /// 
  private Vector3 MouseDownPos = Vector3.zero;
  
  /// 
  /// 玩家位置
  /// 
  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;
      }
    }
  }

有更好的方法欢迎指点。

如果对你有帮助,酌情打赏~

Unity实现鼠标滑动控制物体移动_第1张图片 Unity实现鼠标滑动控制物体移动_第2张图片

你可能感兴趣的:(代码实现)