unity小技巧:實(shí)現(xiàn)拖拽三維物體效果

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveWorldBlockManager : MonoBehaviour
{
private IEnumerator OnMouseDown()
{
//將三維物體坐標(biāo)轉(zhuǎn)換成屏幕坐標(biāo)
Vector3 screenPosition = Camera.main.WorldToScreenPoint(transform.position);
//鼠標(biāo)屏幕坐標(biāo)
Vector3 currentScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);
//將鼠標(biāo)屏幕坐標(biāo)轉(zhuǎn)換成三維坐標(biāo)
Vector3 mouseWorldPosition = Camera.main.ScreenToWorldPoint(currentScreenSpace);
//計(jì)算物體位置與鼠標(biāo)之間的距離
Vector3 offset = transform.position - mouseWorldPosition;
//提前定義好返回值
var cs = new WaitForFixedUpdate();
//當(dāng)按下鼠標(biāo)左鍵時(shí)
while (Input.GetMouseButton(0))
{
//更新鼠標(biāo)屏幕坐標(biāo)
currentScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);
//將鼠標(biāo)屏幕坐標(biāo)轉(zhuǎn)換成三維坐標(biāo)
mouseWorldPosition = Camera.main.ScreenToWorldPoint(currentScreenSpace);
//移動(dòng)物體坐標(biāo)
Vector3 currentPosition = mouseWorldPosition + offset;
//將物體坐標(biāo)設(shè)置成移動(dòng)后的坐標(biāo)
transform.position = currentPosition;
//返回 (只有當(dāng)下一次fixedUpdate開始時(shí)再執(zhí)行后續(xù)代碼)
yield return cs;
}
}
}