在画布中实例化的Gameobject显示在其他画布项后面

时间:2015-08-16 17:04:12

标签: c# unity3d perspectivecamera gameobject

在我的游戏中,如果这是玩家第一次玩游戏,那么我会显示一个图像。我在画布中实例化它如下:

    if (PlayerPrefs.GetInt("First Time", 1) == 1)
    {
        introEnabled = true;

        //pause all activity
        pause.pauseOrResume();

        intro = Instantiate (Resources.Load ("intro"), transform.position, Quaternion.identity) as GameObject;
        Canvas canvas = GameObject.Find("Canvas").GetComponent<Canvas>();
        intro.transform.SetParent(canvas.transform, false);
        //robot = Instantiate (Resources.Load ("robot"), transform.position, Quaternion.identity) as GameObject;

        PlayerPrefs.SetInt("First Time", 0);
        PlayerPrefs.Save();
    }

我可以在检查器中看到游戏运行时创建对象时,它确实显示在画布中。我只是不知道为什么它不会出现在画布中的所有其他对象之上。

画布渲染模式设置为&#34;屏幕空间 - 叠加&#34;并且在排序顺序中设置为0。正在实例化的游戏对象的排序顺序为0,它位于默认图层中。

我没有尝试过任何工作。 z值没有区别,甚至将画布和实例化对象放在Default层中,并将画布设置为排序顺序为2,实例化对象排序为1(因此它首先渲染)不会产生差。

3 个答案:

答案 0 :(得分:1)

您想要的是使用transform.SetAsLastSibling()CanvasRenderer根据其兄弟索引(层次结构中的位置)从上到下按顺序呈现GameObject

然而,在进一步检查你的代码之后,我注意到了一些事情,我应该说如果你试图实例化介绍屏幕,我强烈建议用它自己的Canvas来实例化它,而不是将它父母化为现有的。重要的事情应该是它自己的专用Canvas

更新:此处的问题是您使用GameObjectstransform渲染器实例化SpriteCanvas UI会在所有网格图层上最后呈现,因此如果您希望新实例化的GameObjects参与其中,则需要使用RectTransformImage组件。< / p>

答案 1 :(得分:0)

而不是默认图层将其图层更改为UI。

答案 2 :(得分:0)

您的代码似乎很好,它可能与附加此脚本的游戏对象有关(因为您在Instantiate中传递transform.position)。它可能是将实例化的游戏对象放在画布上。一旦它起作用就试试这样。

intro = Instantiate (Resources.Load ("intro")) as GameObject;

并在设置其父级(非常重要)后,设置它的位置

intro.transform.localPosition = new vector3(0,0,0);