unity 沿着轴(x,y,z)拖动物体

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//选择轴向
public enum axisPostion
{
    x_dir,
    y_dir,
    z_dir,
}

public class DrageThree : 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;
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_42399500/article/details/84876600