在我的游戏中,如果这是玩家第一次玩游戏,那么我会显示一个图像。我在画布中实例化它如下:
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(因此它首先渲染)不会产生差。
答案 0 :(得分:1)
您想要的是使用transform.SetAsLastSibling()
。 CanvasRenderer
根据其兄弟索引(层次结构中的位置)从上到下按顺序呈现GameObject
。
然而,在进一步检查你的代码之后,我注意到了一些事情,我应该说如果你试图实例化介绍屏幕,我强烈建议用它自己的Canvas
来实例化它,而不是将它父母化为现有的。重要的事情应该是它自己的专用Canvas
。
更新:此处的问题是您使用GameObjects
和transform
渲染器实例化Sprite
。 Canvas
UI会在所有网格图层上最后呈现,因此如果您希望新实例化的GameObjects
参与其中,则需要使用RectTransform
和Image
组件。< / p>
答案 1 :(得分:0)
而不是默认图层将其图层更改为UI。
答案 2 :(得分:0)
您的代码似乎很好,它可能与附加此脚本的游戏对象有关(因为您在Instantiate中传递transform.position)。它可能是将实例化的游戏对象放在画布上。一旦它起作用就试试这样。
intro = Instantiate (Resources.Load ("intro")) as GameObject;
并在设置其父级(非常重要)后,设置它的位置
intro.transform.localPosition = new vector3(0,0,0);