Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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#_Unity3d - Fatal编程技术网

C# 将位置从三维摄影机转换为二维摄影机

C# 将位置从三维摄影机转换为二维摄影机,c#,unity3d,C#,Unity3d,目前我有两个摄像头,一个用于查看3D对象(透视),另一个用于查看2D对象(正交)。 (此外,摄影机的视图从不相互截取。) 我尝试根据3D对象的位置显示2D对象,如下所示: 我拥有的是相应的2D和3D,以及3D游戏对象的矢量3位置 我目前拥有的: 唯一的问题是返回的位置没有与3D位置完全对齐。 这导致了这种结果: 此外,我已确保3D和2D对象的轴心点都正确设置在中心,但它仍然无法按预期工作 (我目前正在使用Unity 2019.1.14f1) 编辑 我想要什么的TLDR: 我想要一个世界位置,

目前我有两个摄像头,一个用于查看3D对象(透视),另一个用于查看2D对象(正交)。
(此外,摄影机的视图从不相互截取。)

我尝试根据3D对象的位置显示2D对象,如下所示:

我拥有的是相应的2D和3D,以及3D
游戏对象的
矢量3
位置

我目前拥有的:

唯一的问题是返回的位置没有与3D位置完全对齐。
这导致了这种结果:

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

(我目前正在使用Unity 2019.1.14f1

编辑 我想要什么的TLDR:
我想要一个世界位置,这个位置是基于3D摄像机中的一个对象,现在是2D摄像机中的一个对象,并且让它们看起来像是在玩家视角(显示屏)中的相同位置

之后我要实例化的(使用该位置)是一个非UI游戏对象。

更具体地说是粒子系统。

检查两个
相机的
视口矩形设置

如果两个摄像头之间存在任何差异,您将始终获得位置偏移

我使用

public Camera camera3d;
public Camera camera2d;
public Transform obj3d;
public Transform obj2d;

void Update()
{ 
    obj2d.position = camera2d.ViewportToWorldPoint(camera3d.WorldToViewportPoint(obj3d.position)); 
}

只要
视口矩形设置匹配,它就可以正常工作。

不确定我是否遗漏了什么,但你不是只想要
camera2D.WorldToViewportPoint
,因为你想将世界位置转换为二维位置吗?@John我刚刚测试了一下,没有用(同样的问题,但实际情况却远不止如此);也许你可以发布最后的代码,以防我遗漏了什么?嗯。我不是真的做Unity,所以可能我弄错了。看起来你只是把一个世界位置转换成相机投影中的一个位置,然后把相机位置转换成一个2D投影点。@derHugo我用的是
ViewportToWorldPoint
一个d
ViewportToWorldPoint
,因为我可以获得游戏对象相对于3D相机的相对位置,然后将其转换为相对于2D相机的世界正值。
camera3D.WorldToScreenPoint(位置3D)
不会剪切它,因为它会返回一个基于屏幕空间的位置,而不是基于2D摄影机;使用
ScreenToWorldPoint
使用2D摄影机将其转换回世界空间也给了我同样的问题;我编辑了我的问题,以使我的目标更清晰。您是否可能在其中一个ca的
视口矩形中有偏移梅拉斯?
public Camera camera3d;
public Camera camera2d;
public Transform obj3d;
public Transform obj2d;

void Update()
{ 
    obj2d.position = camera2d.ViewportToWorldPoint(camera3d.WorldToViewportPoint(obj3d.position)); 
}