Unity3D鼠标拖拽实现相机移动

实现拖拽的方法:
通过创建一个X-Z平面 得到从屏幕发出的射线到当前X-Z平面的碰撞点 得到的位置作为起始位置和结束位置
当鼠标按下的时候 得到的是初始位置 当鼠标松开的时候 得到的是结束位置

得到两个位置的距离
再通过Vector.Lerp()函数和Update()函数来平衡每一帧的差异 进而实现滑动的效果。

代码示例:直接挂在Camera上即可

    private Vector3 dragStartPos, dragCurrentPos;
    private Vector3 newPos;
    private void Start()
    {
        newPos = transform.position;
    }
 	private void HandleCameraMove()
    {
        if (Input.GetMouseButtonDown(1))
        {
            Plane plane = new Plane(Vector3.up, Vector3.zero);
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            float distance;
            if (plane.Raycast(ray, out distance))
            {
                dragStartPos = ray.GetPoint(distance);
            }
        }
        if (Input.GetMouseButton(1))
        {
            Plane plane = new Plane(Vector3.up, Vector3.zero);
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            float distance;
            if (plane.Raycast(ray, out distance))
            {
                //获取到这条射线到XZ平面上具体点的位子信息
                dragCurrentPos = ray.GetPoint(distance);
                Vector3 difference = dragStartPos - dragCurrentPos;
                Debug.Log(difference);
                newPos = transform.position + difference;
            }
        }
        transform.position = Vector3.Lerp(transform.position, newPos, moveTime * Time.deltaTime);
    }

关于Plane:
官方文档:
0
通过创建一个平面 来计算鼠标出的射线到XZ平面的具体位置
第一个参数是垂直于平面向上的单位向量 这样判断平面为XZ方向
这里传入的向量必须是归一化的向量 也就是Vector3.up
第二个参数是距离原始点位的距离 默认为0即可

关于这一行 可以控制相机移动的方向

 Vector3 difference = dragStartPos - dragCurrentPos;

比如说让鼠标从右上向左下滑动

那么就让镜头从左上向右上滑动
1

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Unity3D实现即时战略游戏的相机拖拽和缩放功能相对简单。为了实现拖拽和缩放,我们需要在游戏场景中添加一个相机,并创建一个脚本来控制相机移动和缩放。 首先,让我们来实现相机拖拽功能。我们可以在脚本中定义一个鼠标按下的标志以及按下时的鼠标位置。当玩家按下鼠标时,我们记录下当前鼠标的位置,并将鼠标按下的标志设为true。接下来,在鼠标移动的回调函数中,我们检查鼠标按下的标志是否为true。如果是,我们获取当前鼠标的位置,并计算出鼠标移动的距离。然后,我们将相机的位置根据鼠标移动的距离进行相应的移动。这样就实现相机拖拽功能。 接下来,我们来实现相机的缩放功能。我们可以使用鼠标滚轮来实现相机的缩放。在脚本中,我们可以使用Input.GetAxis("Mouse ScrollWheel")来获取鼠标滚轮的滚动距离。然后,我们可以根据滚动距离来调整相机的缩放。例如,我们可以通过修改相机的field of view来实现缩放。如果滚轮向前滚动,我们可以让相机的field of view减小,从而实现缩小视野。如果滚轮向后滚动,我们可以让相机的field of view增加,从而实现放大视野。 通过以上步骤,我们就可以实现Unity3D中的即时战略游戏中相机拖拽和缩放功能。这样玩家就可以通过拖拽移动相机,并通过滚轮来进行缩放,从而更好地观察游戏场景和控制游戏进程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值