如何使用Unity3D转换相机之间的坐标

时间:2018-06-14 08:48:06

标签: c# unity3d

我有两台相机,

为什么我有两台相机?

因为我想在Canvas前面放一些游戏对象以便它可以移动,如果它感觉很开心可能会有一些粒子等等。所以:

  1. 我设置了带有遮罩选项UI的主摄像头并让它负责所有UI内容,并确保它不会重叠我设置画布模式的所有内容"屏幕空间摄像头&# 34;

  2. 我设置了另一台相机并将其捕获除了UI之外的所有其他内容。

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

  4. 事情进展顺利,我可以在UI之前看到游戏对象。干杯!

    但在某些情况下,我将UI元素转换为世界空间中的点,这样我就可以在UI元素附近生成一些gameObject,也可以将它移动到另一个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);
      });
    

    主要思想是在按钮附近实例化一个宝石并让它飞到计数面板。

    但是因为我制作了画布&#34;屏幕空间相机&#34;而不是&#34;屏幕空间覆盖&#34;,以上所有代码都将是一团糟。此外,我想我必须将画布元素的屏幕点转换为另一个相机的世界空间,但我甚至无法通过

    获得画布元素的实际像素位置 现在

    p1.GetComponent<RectTransform>().position

    那我该怎么做?

    我已经demo project来证明这个问题。

1 个答案:

答案 0 :(得分:1)

var p1R = p1.GetComponent<RectTransform>();
Vector3 p1WorldPos = p1R.TransformPoint(p1R.rect.center);
//use p1WorldPos in your other camera