美文网首页
在unity中实现鼠标拖动物体移动

在unity中实现鼠标拖动物体移动

作者: Joe_Game | 来源:发表于2018-09-06 18:32 被阅读0次

    主要步骤

    1. 得到物体屏幕坐标的Z值
    • 物体由世界坐标转为屏幕坐标
    1. 得到鼠标的世界坐标(Z值是物体的屏幕坐标)
    • 鼠标三维屏幕坐标从屏幕坐标转为世界坐标
    1. 计算摄像机与物体的偏移量
    • 都是世界坐标下,计算鼠标世界坐标与物体世界坐标的偏移值
    1. 循环判断是否按鼠标左键
    2. 按键后,得到当前的鼠标世界坐标
    3. 物体世界坐标 = 目前当前的世界坐标 + 偏移值

    注意

    1. 要用while循环
    2. 要用协程
    3. 要yield return new WaitForFixedUpdate()
    4. 在Start方法中调用StartCoroutine(要调用的协程方法)
    5. 此脚本要挂载在要实现此功能的物体上
    6. 要调用OnMouseDown方法

    代码

    using System.Collections;
    using UnityEngine;
    
    public class Test : MonoBehaviour {
    
        Vector3 cubeScreenPos;
        Vector3 offset;
    
        void Start()
        {
            StartCoroutine(OnMouseDown());
        }
    
    
        IEnumerator OnMouseDown()
        {
            //1. 得到物体的屏幕坐标
            cubeScreenPos = Camera.main.WorldToScreenPoint(transform.position);
    
            //2. 计算偏移量
            //鼠标的三维坐标
            Vector3 mousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, cubeScreenPos.z);
            //鼠标三维坐标转为世界坐标
            mousePos = Camera.main.ScreenToWorldPoint(mousePos);
            offset = transform.position - mousePos;
    
            //3. 物体随着鼠标移动
            while (Input.GetMouseButton(0))
            {
                //目前的鼠标二维坐标转为三维坐标
                Vector3 curMousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, cubeScreenPos.z);
                //目前的鼠标三维坐标转为世界坐标
                curMousePos = Camera.main.ScreenToWorldPoint(curMousePos);
    
                //物体世界位置
                transform.position = curMousePos + offset;
                yield return new WaitForFixedUpdate(); //这个很重要,循环执行
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:在unity中实现鼠标拖动物体移动

          本文链接:https://www.haomeiwen.com/subject/uhgxgftx.html