C# 在画布中实例化的游戏对象显示在其他画布项目后面

C# 在画布中实例化的游戏对象显示在其他画布项目后面,c#,unity3d,perspectivecamera,gameobject,C#,Unity3d,Perspectivecamera,Gameobject,在我的游戏中,如果这是玩家第一次玩游戏,那么我会显示一个图像。我在画布中实例化它,如下所示: if (PlayerPrefs.GetInt("First Time", 1) == 1) { introEnabled = true; //pause all activity pause.pauseOrResume(); intro = Instantiate (Resources.Load ("intro"), t

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

    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();
    }
if(PlayerPrefs.GetInt(“第一次”,1)=1)
{
introEnabled=true;
//暂停所有活动
pause.pauseOrResume();
intro=实例化(Resources.Load(“intro”)、transform.position、Quaternion.identity)作为游戏对象;
Canvas Canvas=GameObject.Find(“Canvas”).GetComponent();
intro.transform.SetParent(canvas.transform,false);
//robot=实例化(Resources.Load(“robot”)、transform.position、Quaternion.identity)作为游戏对象;
PlayerPrefs.SetInt(“第一次”,0);
PlayerPrefs.Save();
}
我可以在游戏运行时的检查器中看到,当创建对象时,它确实会显示在画布中。我只是不知道为什么它不会出现在画布中所有其他对象的顶部

画布渲染模式设置为“屏幕空间-覆盖”,并按排序顺序设置为0。正在实例化的游戏对象的排序顺序也为0,它位于默认层中


我试过的都没用。z值没有区别,甚至将画布和实例化对象放在默认层中,并将画布设置为排序顺序2,将实例化对象设置为排序顺序1(因此首先渲染)没有区别。

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

您想要的是使用。
CanvasRenderer
根据其兄弟索引(在层次结构中的位置)从上到下依次呈现
GameObject
s

然而,在进一步检查代码之后,我注意到了一些事情,我应该说,如果您试图实例化简介屏幕,我强烈建议您使用它自己的
画布来实例化它,而不是将其作为现有画布的子对象。重要的东西应该有自己专用的
画布


更新:这里的问题是,您正在使用
变换
精灵
渲染器实例化
游戏对象
Canvas
UI在所有网格层上最后渲染,因此,如果您希望新实例化的
GameObjects
参与,则需要使用
RectTransform
Image
组件。您的代码似乎很好,这可能与附加此脚本的gameobject有关(因为您正在实例化中传递transform.position)。它可能正在将实例化的游戏对象定位到画布之外。请在可行时尝试这样做

intro = Instantiate (Resources.Load ("intro")) as GameObject;
在设置它的父对象(非常重要)之后,像这样设置它的位置

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

对于哪一个?画布还是新实例化的对象?画布和游戏对象都应该在ui层中。我尝试了一下,但它什么也没做。我不知道这会有什么作用,因为如果默认情况下它们都在默认层中,但它们不能正常工作,那么将它们放在另一层中不会有什么区别。我想它们可能在不同的层中。我尝试了您所说的所有内容,但没有任何区别。它仍然显示在其他画布对象的后面。添加transform.SetAsLastSibling()后对于画布和新实例化的游戏对象,新实例化的游戏对象仍然显示在旧画布项目的后面。它们有
RectTransform
s?和
Image
组件?新实例化的游戏对象有一个变换和一个精灵渲染器。也就是说,这是一个预设,我就是我这就是问题所在。什么是?我需要改变什么?