unity实现鼠标拖住3D物体
本文实例为大家分享了unity实现鼠标拖住3D物体的具体代码,供大家参考,具体内容如下
把该脚本直接挂在要拖拽的物体上即可
usingSystem.Collections;
usingSystem.Collections.Generic;
usingUnityEngine;
publicclassModelDrages:MonoBehaviour
{
//发射射线的摄像机
privateCameracam;
//射线碰撞的物体
privateGameObjectgo;
//射线碰撞物体的名字
publicstaticstringbtnName;
privateVector3screenSpace;
privateVector3offset;
privateboolisDrage=false;
//Usethisforinitialization
voidStart()
{
cam=Camera.main;
}
//Updateiscalledonceperframe
voidUpdate()
{
//整体初始位置
Rayray=cam.ScreenPointToRay(Input.mousePosition);
//从摄像机发出到点击坐标的射线
RaycastHithitInfo;
if(isDrage==false)
{
if(Physics.Raycast(ray,outhitInfo))
{
//划出射线只有在Scene视图中才能看到
Debug.DrawLine(ray.origin,hitInfo.point);
go=hitInfo.collider.gameObject;
print(btnName);
screenSpace=cam.WorldToScreenPoint(go.transform.position);
offset=go.transform.position-cam.ScreenToWorldPoint(newVector3(Input.mousePosition.x,Input.mousePosition.y,Input.mousePosition.z));
//物体的名字
btnName=go.name;
//组件的名字
}
else
{
btnName=null;
}
}
if(Input.GetMouseButton(0))
{
Vector3currentScreenSpace=newVector3(Input.mousePosition.x,Input.mousePosition.y,screenSpace.z);
Vector3currentPosition=cam.ScreenToWorldPoint(currentScreenSpace)+offset;
if(btnName!=null)
{
go.transform.position=currentPosition;
}
isDrage=true;
}
else
{
isDrage=false;
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。