Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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# 如何使用Unity3D转换摄影机之间的坐标_C#_Unity3d - Fatal编程技术网

C# 如何使用Unity3D转换摄影机之间的坐标

C# 如何使用Unity3D转换摄影机之间的坐标,c#,unity3d,C#,Unity3d,我有两个摄像头 为什么我有两个照相机 因为我想在画布前面放一些游戏物体,这样它就可以四处移动,如果它感到高兴的话,可能会有一些粒子等等。。因此: 我设置了带有遮罩选项UI的主摄像头,并让它负责所有UI内容,为了确保它不会与所有内容重叠,我设置了画布模式“屏幕空间摄像头” 我设置了另一个摄像头,让它捕捉除UI以外的所有内容 设置其深度,以便带有UI的主摄像头位于另一个摄像头的后面 现在一切进展顺利,我可以在UI之前看到游戏对象。干杯 但在某些情况下,我需要将UI元素转换为世界空间中的点,以便在UI

我有两个摄像头

为什么我有两个照相机

因为我想在画布前面放一些游戏物体,这样它就可以四处移动,如果它感到高兴的话,可能会有一些粒子等等。。因此:

  • 我设置了带有遮罩选项UI的主摄像头,并让它负责所有UI内容,为了确保它不会与所有内容重叠,我设置了画布模式“屏幕空间摄像头”

  • 我设置了另一个摄像头,让它捕捉除UI以外的所有内容

  • 设置其深度,以便带有UI的主摄像头位于另一个摄像头的后面

  • 现在一切进展顺利,我可以在UI之前看到游戏对象。干杯

    但在某些情况下,我需要将UI元素转换为世界空间中的点,以便在UI元素附近生成一些游戏对象,并可能将其转换为另一个UI元素,让我们以收集宝石为例

    通常,我可以通过以下代码来实现:

      GameObject go  = Instantiate(eff_gem);
      go.transform.position = Camera.main.ScreenToWorldPoint(p1.GetComponent<RectTransform>().position);
      go.transform.DoMove(p2.GetComponent<RectTransform>().position, 1f).OnComplete(()=>{
           Destory(go, 1f);
      });
    
    GameObject go=实例化(eff_gem);
    go.transform.position=Camera.main.ScreenToWorldPoint(p1.GetComponent().position);
    go.transform.DoMove(p2.GetComponent().position,1f).OnComplete(()=>{
    破坏(go,1f);
    });
    
    其主要思想是实例化按钮附近的gem,并使其飞到count面板

    但由于我将画布改为“屏幕空间摄影机”,而不是“屏幕空间覆盖”,因此上面的所有代码都将是一团混乱。此外,我认为我必须通过另一台摄像机将画布元素的屏幕点转换为世界空间,但我甚至无法通过摄像机获得画布元素的实际像素位置

    p1.GetComponent()。立即定位

    那我该怎么做呢


    我已经做了一个示例来演示这个问题。

    var p1R=p1.GetComponent();
    
    var p1R = p1.GetComponent<RectTransform>();
    Vector3 p1WorldPos = p1R.TransformPoint(p1R.rect.center);
    //use p1WorldPos in your other camera
    
    向量3 p1WorldPos=p1R.TransformPoint(p1R.rect.center); //在其他相机中使用p1WorldPos
    你能给我更多的提示吗?既然你给的代码不起作用了?@armnotstrong你能详细说明一下它是怎么对你不起作用的吗?嗯。。。我计划做一个演示项目,等等,我刚刚做了一个演示。先谢谢你。