鼠标拖拽
来源:互联网 发布:java购物系统源码 编辑:程序博客网 时间:2024/05/21 18:49
1.把这段脚本拖给想要拖拽的物体,然后加上碰撞盒就可以了。
private Vector3 _vec3TargetScreenSpace;// 目标物体的屏幕空间坐标 private Vector3 _vec3TargetWorldSpace;// 目标物体的世界空间坐标 private Transform _trans;// 目标物体的空间变换组件 private Vector3 _vec3MouseScreenSpace;// 鼠标的屏幕空间坐标 private Vector3 _vec3Offset;// 偏移 void Awake() { _trans = transform; } IEnumerator OnMouseDown() { // 把目标物体的世界空间坐标转换到它自身的屏幕空间坐标 _vec3TargetScreenSpace = Camera.main.WorldToScreenPoint(_trans.position); // 存储鼠标的屏幕空间坐标(Z值使用目标物体的屏幕空间坐标) _vec3MouseScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _vec3TargetScreenSpace.z); // 计算目标物体与鼠标物体在世界空间中的偏移量 _vec3Offset = _trans.position - Camera.main.ScreenToWorldPoint(_vec3MouseScreenSpace); // 鼠标左键按下 while (Input.GetMouseButton(0)) { // 存储鼠标的屏幕空间坐标(Z值使用目标物体的屏幕空间坐标) _vec3MouseScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _vec3TargetScreenSpace.z); // 把鼠标的屏幕空间坐标转换到世界空间坐标(Z值使用目标物体的屏幕空间坐标),加上偏移量,以此作为目标物体的世界空间坐标 _vec3TargetWorldSpace = Camera.main.ScreenToWorldPoint(_vec3MouseScreenSpace) + _vec3Offset; // 更新目标物体的世界空间坐标 _trans.position = _vec3TargetWorldSpace; // 等待固定更新 yield return new WaitForFixedUpdate(); } } }
public Texture2D[] pic = new Texture2D[4]; private Color c; private Texture origPic; private int index; private Vector3 screenPoint; private Vector3 scanPos; private Vector3 offset; private Vector3 origPos; static public bool bDrag; // Use this for initialization void Start() { c = GetComponent<Renderer>().material.color; origPic = GetComponent<Renderer>().material.mainTexture; //pic = new Texture2D[4]; index = 0; scanPos = this.transform.position; origPos = scanPos; bDrag = false; } // Update is called once per frame void Update() { } void OnMouseDown() { print("Mouse down"); GetComponent<Renderer>().material.color = c; GetComponent<Renderer>().material.mainTexture = pic[index]; index++; if (index == 3) index = 0; ///// screenPoint = Camera.main.WorldToScreenPoint(scanPos); offset = scanPos - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z)); Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z); Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset; //print(curPosition); transform.position = curPosition; } void OnMouseEnter() { print("Mouse enter"); index = 0; GetComponent<Renderer>().material.color = Color.red; } void OnMouseExit() { print("Mouse exit"); GetComponent<Renderer>().material.color = c; GetComponent<Renderer>().material.mainTexture = origPic; } void OnMouseDrag() { bDrag = true; Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z); Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset; transform.position = curPosition; print("curPosition" + curPosition); } void OnMouseUp() { print("mouse up"); //transform.TransformPoint(origPos); bDrag = false; transform.position = origPos; }
0 0
- Unity3d 实现用鼠标拖拽鼠标
- 鼠标拖拽
- AjaxUI:鼠标拖拽
- 鼠标拖拽
- 鼠标拖拽2
- 鼠标拖拽效果
- 鼠标拖拽效果
- 鼠标拖拽
- 鼠标拖拽事件
- javaScript -鼠标拖拽
- 鼠标拖拽案例
- 鼠标拖拽事件
- 鼠标拖拽
- web--鼠标拖拽
- BT的鼠标拖拽
- 鼠标拖拽排序ListBox
- 鼠标拖拽翻页(分页)
- JS鼠标拖拽效果
- 2016“编程之美“挑战赛 复赛整理
- npm下载错误解决办法
- Vue.js基础知识
- sufaceview
- Ext grid修改数据后,选中行没有更新。
- 鼠标拖拽
- (转)自定义控件三部曲之动画篇(二)——Interpolator插值器
- 基于卷积神经网络的图像超分辨率[译文]
- 银行卡验证工具类分享
- Microsoft .NET Framework 版本
- 程序员解决问题的策略总结
- 纵观客户服务渠道变化,引领在线客服系统新方向
- java.lang.IllegalArgumentException: You need to use a Theme.AppCompat theme (or descendant) with the
- 浅谈Jmeter之中文乱码问题解决方法