Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算屏幕空间中的对象位置-摄影机画布_C#_User Interface_Unity3d_Canvas - Fatal编程技术网

C# 计算屏幕空间中的对象位置-摄影机画布

C# 计算屏幕空间中的对象位置-摄影机画布,c#,user-interface,unity3d,canvas,C#,User Interface,Unity3d,Canvas,我需要计算一个3D对象的正确位置,我在UI中显示在一个原始图像上。如果我把我的UI图像放在屏幕中央,我可以完美地计算它,如果我在UI画布上移动我的图像,我得到的结果会偏移,这取决于我移动的一侧。我已经拍摄了一些我的意思的截图,橙色的一面是我的3D四边形,白色的正方形只是一个图像调试,在那里我的点应该被计算出来 我的设置如下: -指向三维四边形的世界摄影机 -带有专用透视摄像头的ui画布(屏幕空间-摄像头) -“我的ui”画布中的一个面板,显示3D四元菜单 守则: var-worldPoint

我需要计算一个3D对象的正确位置,我在UI中显示在一个原始图像上。如果我把我的UI图像放在屏幕中央,我可以完美地计算它,如果我在UI画布上移动我的图像,我得到的结果会偏移,这取决于我移动的一侧。我已经拍摄了一些我的意思的截图,橙色的一面是我的3D四边形,白色的正方形只是一个图像调试,在那里我的点应该被计算出来

我的设置如下: -指向三维四边形的世界摄影机 -带有专用透视摄像头的ui画布(屏幕空间-摄像头) -“我的ui”画布中的一个面板,显示3D四元菜单

守则:

var-worldPoint=t.Value.MeshRenderer.bounds.min//t、 值是三维四边形
var screenPoint=worldCamera.WorldToScreenPoint(worldPoint);
screenPoint.z=(baseCanvas.transform.position-uiCamera.transform.position).magnity//baseCanvas是UI画布
var pos=uiCamera.ScreenToWorldPoint(屏幕点);
debugger.transform.position=pos//调试器只是用于查看计算点所在位置的方形图像
我试过多种方法,比如:

var screenPoint=worldCamera.WorldToScreenPoint(t.Value.MeshRenderer.bounds.min);
向量2局部点;
ScreenPointToLocalPointInRectangle(rectTransform、screenPoint、uiCamera、out localPoint)//rectTransform是我的UI面板
debugger.transform.localPosition=localPoint

但我总是得到相同的结果,考虑到偏移量,如何进行正确的计算?

您希望得到的确切位置是什么<代码>边界.min?什么是
(baseCanvas.transform.position-uiCamera.transform.position)应该是什么?(这可能只有在它们之间没有x/y偏移时才起作用。为什么不简单地
(baseCanvas.transform.position-uiCamera.transform.position).z
?实际上,屏幕an与摄像头之间的距离始终为
0
。可能您更希望z与
t.Value
之间的距离?是的,我正在寻找bounds.min位置。该大小只是在计算点的偏移量时尝试的,但它不起作用