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

2018-09-06  本文已影响0人  Joe_Game

主要步骤

  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(); //这个很重要,循环执行
        }
    }
}

上一篇下一篇

猜你喜欢

热点阅读