将位置从3D相机转换为2D相机

时间:2019-08-28 01:56:02

标签: c# unity3d

目前,我有2个摄像头,一个用于查看3D对象(透视),另一个用于查看2D对象(正交)。
(此外,摄像机的视线永远不会相互遮挡。)

我试图基于3D对象的位置显示2D对象,如下所示: Image of what I am trying to achieve

我所拥有的分别是2D和3D Camera,以及3D Vector3的{​​{1}}位置。

我目前所拥有的:

GameObject

唯一的问题是返回的位置未与3D位置完全对齐。
结果如下: Image of expected and actual result

此外,我确保3D和2D对象的枢轴点都正确设置在中心,但是仍然无法按预期工作。

(我目前正在使用public Vector2 Convert3DPositionTo2DPosition(Camera camera3D, Vector3 position3D, Camera camera2D) { var tempPos = camera3D.WorldToViewportPoint(position3D); return camera2D.ViewportToWorldPoint(tempPos); }

编辑

我想要的TLDR:
我想要一个基于3D相机的对象的世界位置,而现在该对象位于2D相机的视图中,并且让它们看起来在播放器的视点(显示屏幕)中处于相同位置。

此后要实例化(使用该位置)的是非UI GameObject。
更具体地说,是粒子系统。

1 个答案:

答案 0 :(得分:1)

检查两个Viewport Rect的{​​{1}}设置!

enter image description here

如果两台摄像机之间有任何差异,您总是会在位置上产生偏移。

我使用来测试您的解决方案

Camera

,只要public Camera camera3d; public Camera camera2d; public Transform obj3d; public Transform obj2d; void Update() { obj2d.position = camera2d.ViewportToWorldPoint(camera3d.WorldToViewportPoint(obj3d.position)); } 设置匹配,它就可以正常工作-如您所见herehere