unity3d 鼠标延各个方向拖拽物体
生活随笔
收集整理的這篇文章主要介紹了
unity3d 鼠标延各个方向拖拽物体
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
using UnityEngine;
using System.Collections;//選擇軸向
public enum directionEnum{x_dir,y_dir,z_dir,
}
public class DragObject : MonoBehaviour {// Use this for initializationpublic directionEnum myDirection;public Transform target;//需要拖拽的目標public bool isDrag;//表示當前是否可拖動public float MinDistance;public float MaxDistance;private Vector3 mousePos;/// </summary>void Start () {//下面是我用NGUI的事件添加的,也可以使用UGUI或者射線檢測//UIEventListener.Get (this.gameObject).onDrag = DragTarget;//UIEventListener.Get (this.gameObject).onDragEnd = EndDrag;
}// Update is called once per framevoid Update () {}public void SetTarget(Transform go){this.target = go;mousePos = Input.mousePosition;//初始化鼠標初始位置,或者放到Start函數里
}public void DragTarget(){if (isDrag) {Vector3 ScreenSpace = Camera.main.WorldToScreenPoint(target.position); //目標世界坐標轉屏幕,獲取z值Vector3 curScreenSpace = new Vector3(Input.mousePosition.x,Input.mousePosition.y,ScreenSpace.z);//當前鼠標位置轉世界Vector3 offset = target.position - Camera.main.ScreenToWorldPoint (new Vector3 (mousePos.x, mousePos.y, ScreenSpace.z));//鼠標上一幀的世界位置和目標點的位置差Vector3 CurPosition = Camera.main.ScreenToWorldPoint(curScreenSpace)+offset;//鼠標當前位置+位置差switch (myDirection) {case directionEnum.x_dir:target.position = new Vector3 (Mathf.Clamp( CurPosition.x,MinDistance,MaxDistance), target.position.y, target.position.z); break;case directionEnum.y_dir:target.position = new Vector3 (target.position.x,Mathf.Clamp( CurPosition.y,MinDistance,MaxDistance), target.position.z); break;case directionEnum.z_dir:target.position = new Vector3 ( target.position.x, target.position.y, Mathf.Clamp( CurPosition.z,MinDistance,MaxDistance)); break;default:break;}mousePos = Input.mousePosition;}}}
?
如果有不對,或者更好的方法,大家多多指教
轉載于:https://www.cnblogs.com/WgBlog/p/7593819.html
總結
以上是生活随笔為你收集整理的unity3d 鼠标延各个方向拖拽物体的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab矩阵除以一个数字,matla
- 下一篇: js对象数组转java对象数组对象数组对