Unity鼠标控制物体360°旋转和点击移动

一:操作

创建一个游戏对象(方块)

把代码挂在摄像机上

二:代码

    public Camera ca;
    public GameObject transformObj;
    Ray ray;
    RaycastHit RayHit;
    Vector3 vector3;
    GameObject obj;//获取点击到的物体  
    Vector3 startMousePosition;
    void Start()
    {
        //一开始的位置=鼠标的位置
        startMousePosition = Input.mousePosition;
    }
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            ray = ca.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out RayHit))
            {
                obj = GameObject.Find(RayHit.transform.name);
            }
        }
        if (Input.GetMouseButton(0))
        {
            if (obj)
            {
                //将物体的世界坐标转为屏幕坐标ScreenToWorldPoint  
                Vector3 screenObj = Camera.main.WorldToScreenPoint(obj.transform.position);
                //保存鼠标的屏幕坐标 z使用目标物体的屏幕坐标  
                Vector3 screenMouse = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenObj.z);
                vector3 = Camera.main.ScreenToWorldPoint(screenMouse) - obj.transform.position;
                Vector3 currentPosition = obj.transform.position + vector3;
                obj.transform.position = currentPosition;
            }
        }
        //一开始物体随着鼠标各种旋转
        if (Input.mousePosition != startMousePosition && !Input.GetMouseButton(0) && !Input.GetMouseButtonDown(0))
        {
            Vector3 screenObj = Camera.main.WorldToScreenPoint(transformObj.transform.position);
            Vector3 screenMouse = Input.mousePosition;
            Vector3 newVector = screenMouse - screenObj;
            transformObj.transform.forward = newVector;
        }

猜你喜欢

转载自blog.csdn.net/vr851130674/article/details/78831958
今日推荐