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:
官方文档:
通过创建一个平面 来计算鼠标出的射线到XZ平面的具体位置
第一个参数是垂直于平面向上的单位向量 这样判断平面为XZ方向
这里传入的向量必须是归一化的向量 也就是Vector3.up
第二个参数是距离原始点位的距离 默认为0即可
关于这一行 可以控制相机移动的方向
Vector3 difference = dragStartPos - dragCurrentPos;
比如说让鼠标从右上向左下滑动
那么就让镜头从左上向右上滑动
Unity3D鼠标拖拽实现相机移动相关推荐
- html表格宽度拖拽,Js拖拽实现改变Table的列宽解决方案
Js拖拽实现改变Table的列宽 如题,楼主是Js小白,最近遇到问题,需要用Js实现GridView的列拖拽改变大小,在网上找到一段代码如下: function MouseDownToResize(o ...
- FullCalendarDemo5 控件的实例讲解—拖拽实现值班排班(五)
FullCalendarDemo5 控件的实例讲解-拖拽实现值班排班(五) (五)c# asp.net 操作FullCalendarDemo5 导出排班记录 目的:点击导出按钮,弹出参数指定对话框,选 ...
- Silverlight中的拖拽实现的图片上传---1
在Silverlight中因为可以直接从系统的文件夹里面拖出来一个文件直接放到浏览器中,我在想使用这个功能来做成图片上传(或者文件上传),这样的用户体验将会是非常好的. 传统的上传都是打开对话框,选择 ...
- vue2 实现鼠标左键拖拽实现框选功能
一.实现如图所示功能 二.鼠标mousedown事件和click事件重复,不设置click事件可以达到相同效果 // 代码如下 <template><el-dialogtitle=& ...
- unity3d鼠标拖拽模型,旋转模型
直接挂载到模型上 using UnityEngine; using System.Collections;public class OnDrag : MonoBehaviour {//目标物体publ ...
- Html轻松使用拖拽实现垃圾桶,代码带注释,包你能看懂
效果 参考教程: W3school: http://www.w3school.com.cn/html5/html_5_draganddrop.asp 菜鸟教程: http://www.runoob.c ...
- HTML5垃圾桶效果,Html轻松使用拖拽实现垃圾桶,代码带注释,包你能看懂
效果 参考教程: W3school: 菜鸟教程: 关键知识点: 在拖动目标上触发事件 (源元素): ondragstart - 用户开始拖动元素时触发 ondrag - 元素正在拖动时触发 ondra ...
- html5简单拖拽实现自动左右贴边+幸运大转盘
此篇文章主要实现两个功能: 1.点击屏幕下方签到悬浮按钮: 2.弹出幸运大转盘,转盘抽奖签到 效果如图: 在网上找了很多移动端拖拽的js实现方式,大部分都是这一种,html5的touch事件,但是 ...
- HTML5 元素拖拽实现 及 jquery.event.drag插件
如上图片: <!DOCTYPE html> <html> <head><meta http-equiv="Content-Type" co ...
最新文章
- Cypress 的条件测试
- bcp out 带列名导出_从零开始学习 MySQL 系列索引、视图、导入和导出
- 工厂模式 java场景_研磨设计模式之简单工厂模式(场景问题)
- oracle 导入导出指定表
- 三行代码隐藏所有console.log
- 使用截图工具FastStone Capture
- idea类文件前面有个小叉号
- java读取properties配置文件路径
- 耳机插在主机后面声音很小,音频软件测试很大声音,如何解决电脑前面耳机没声音后面却正常的问题...
- IntPtr是什么,该怎么用?
- 史上最著名的电脑病毒
- 服务器带宽打开网页很慢,移动宽带打开网页慢?两招治本移动宽带打开网页速度慢的解决方法...
- 元音I、i 、ε、æ、a小总结
- 设计模式之禅之单一职责原则
- 【程序人生】虚拟现实(VR)版霍兰德职业兴趣岛测试
- android 镂空字体下载,Android开发TextvView实现镂空字体效果
- 2005首届中国优秀独立WAP TOP50
- 关于ACM比赛的感悟
- Linux中查看redis版本
- PMP之假设日志Assumption Log