Unity—点击鼠标实现3D物体拖拽移动
思路
- 要想通过鼠标拖拽物体需要拿到物体的世界坐标以及屏幕坐标.
- 其次获取鼠标在屏幕中移动的偏移量
代码
private Vector3 AOTIScreen; //用来获取物体在屏幕的坐标
private Vector3 MouseStartScreen;//用来获取鼠标按下时在屏幕的位置
private Vector3 MouseNewScreen;//用来获取鼠标按下时每帧的位置
private Vector3 valueScreen;//用来获取偏移量
private void Move()
{
//1.首先将物体从世界坐标转为屏幕坐标
AOTIScreen = Camera.main.WorldToScreenPoint(AoTiModel.position);
//2.获取鼠标在屏幕坐标的偏移量
if (Input.GetMouseButtonDown(1))
{
MouseStartScreen = new Vector3(Input.mousePosition.x, Input.mousePosition.y, AOTIScreen.z);
}
MouseNewScreen= new Vector3(Input.mousePosition.x, Input.mousePosition.y, AOTIScreen.z);
if(MouseNewScreen!= MouseStartScreen)
{
valueScreen = MouseNewScreen - MouseStartScreen;
//3.将偏移量给物体
AoTiModel.position = Camera.main.ScreenToWorldPoint(AOTIScreen + valueScreen);
}
MouseStartScreen = MouseNewScreen;
}
说明
将move()方法放在Update()中,并在Update()里加上判断
void Update()
{
if (Input.GetMouseButton(1))//点击鼠标右键,可以拖拽移动模型
{
Move();
}
}