unity3d 怎么把鼠标坐标转成世界坐标

unity3d 怎么把鼠标坐标转成世界坐标,第1张

第一种:

这是一种发射线,获取当前点击的物体(具有碰撞器)的坐标点(也就是碰撞器范围的坐标点)

if (InputGetMouseButtonDown(0))

{

RaycastHit hitt = new RaycastHit();

Ray ray =CameramainScreenPointToRay(InputmousePosition);

PhysicsRaycast(ray, out hitt);

DebugLog(hittpoint);

//DebugLog(CameramainScreenToWorldPoint(InputmousePosition));

}

第二种:

Camera TempC;//定义摄像机变量

private void Start()

{

TempC = thisGetComponent<Camera>();//获取摄像机的组件 Camera

}

void Update()

{

if(InputGetMouseButtonDown(0))

{

DebugLog(TempCScreenToWorldPoint(new Vector3(InputmousePositionx,InputmousePositiony, 100f)));

}

}

注意:这里容易出现的问题是,从鼠标坐标点转成世界坐标点的时候,新的三维向量Z轴的赋值必须不能是00f,因为,屏幕坐 标点的Z轴,其实是相对于当前摄像机的,如果是0,只能转一次世界坐标系,剩下的不管点哪里都是一个值,所以不能把Z值设为和摄像机的Z坐标重合,我们需要设置一个非0的数字,最后转成世界坐标系后的值是,摄像机的Z轴加上所设置的值。例如当前摄像机Z坐标是10f,我所设置的Z值是10f,最后转成世界坐标系后的Z值就是20;下面是老外的经典回复。

Thereare two problems here The first one is that you need a 'new' in front of yourVector3() in C# The second is that the 'z' parameter must be the distance infront of the camera In perspective mode at least, passing 0 will causeScreenToWorldPoint() to always return the position of the camera So the callwill look something like:

worldPos = CameramainScreenToWorldPoint(new Vector3(InputmousePositionx,InputmousePositiony, 100f));

Notethe measurement for the 'z' parameter is from camera plane to the playingsurface plane It is not the distance between the camera and the object If thecamera is aligned with the axes, then the distance is easy to calculate If thecamera is at an angle (ie not axes aligned), then ScreenToWorldPoint() is notthe way to go

1打开Unity3d工程,新建脚本。

2添加脚本代码,如图所示:

3添加物体和三个文本,将脚本赋予物体,将文本拖拽到脚本中的GUIText变量中。

4按下播放按钮,选中物体并拖拽,观察坐标变化。

以上就是关于unity3d 怎么把鼠标坐标转成世界坐标全部的内容,包括:unity3d 怎么把鼠标坐标转成世界坐标、unity3d里怎样获得鼠标按下后拖拽的距离和向量值、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9564422.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存