unity 沿着轴(x,y,z)拖动物体
using System.Collections; using System.Collections.Generic; using UnityEngine; //选择轴向 public enum axisPostion { x_dir, y_dir, z_dir, } public class hong : MonoBehaviour { public axisPostion myDirection; public Transform target;//需要拖拽的目标 public bool isDrag;//表示当前是否可拖动 private Vector3 mousePos; private Vector3 ScreenSpace, curScreenSpace, offset, CurPosition; void Start() { } void Update() { DragTarget(); } public void DragTarget() { if (isDrag) { ScreenSpace = Camera.main.WorldToScreenPoint(target.position); //目标世界坐标转屏幕,获取z值 curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, ScreenSpace.z);//当前鼠标位置转世界 offset = target.position - Camera.main.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, ScreenSpace.z));//鼠标上一帧的世界位置和目标点的位置差 CurPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset;//鼠标当前位置+位置差 switch (myDirection) { case axisPostion.x_dir: target.position = new Vector3(CurPosition.x, target.position.y, target.position.z); break; case axisPostion.y_dir: target.position = new Vector3(target.position.x, CurPosition.y, target.position.z); break; case axisPostion.z_dir: target.position = new Vector3(target.position.x, target.position.y, CurPosition.z); break; default: break; } mousePos = Input.mousePosition; } } private void OnMouseDown() { isDrag = true; mousePos = Input.mousePosition; } private void OnMouseDrag() { isDrag = true; } private void OnMouseUp() { isDrag = false; } }