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;
    }



}

  

posted @ 2020-11-10 15:21  GP19  阅读(728)  评论(0)    收藏  举报