简体   繁体   English

Unity:在创建时停用GameObject

[英]Unity: Deactivate GameObject on creation

I'm creating a GameObject (rectangle with a texture) at runtime while starting my app and want to display it later. 我在启动应用程序时正在运行时创建GameObject(带有纹理的矩形),并希望以后显示它。 But if I set it inactive right away ( myGO.setActive(false) ) or even while it's still creating it (directly after GameObject o = new GameObject() ), it shows up for a second, then disappears again. 但是,如果我立即将其设置为非活动状态( myGO.setActive(false) )或什至仍在创建它时(直接在GameObject o = new GameObject() ),它会显示一秒钟,然后再次消失。

I'm aware that I could create the GameObject the first time it's actually needed but I want to do all the setup like that while displaying a loading screen. 我知道我可以在第一次实际需要时创建GameObject,但是我想在显示加载屏幕的同时进行所有设置。

Is it possible to set a GameObject inactive instantly when it's ready but before it's actually displayed? 准备好但在实际显示之前,可以立即将GameObject设置为非活动状态吗?

Code (shortened version): 代码(简化版):

private void StartUpMethod() {
    GameObject myGO = MakePhoto(vertices);

    if(myGO==null) {
        ShowError("Error Message");
    } else {
        myGO.SetActive(false);
    }
}

private GameObject MakePhoto(Vector3[] vertices) {
    byte[] fileData = File.ReadAllBytes(path);
    Texture2D tex = new Texture2D(2,2);
    tex.LoadImage(fileData);

    GameObject o = new GameObject();
    Mesh m = new Mesh();
    Material mat = new Material(Shader.Find("Standard")) { mainTexture = tex };
    Vector3[] vv = new Vector3[] { new Vector3(0,0,0),new Vector3(length,0,0),new Vector3(length,width,0),new Vector3(0,width,0) };

    if(o.GetComponent<MeshFilter>() == null) { o.AddComponent<MeshFilter>(); }
    if(o.GetComponent<MeshRenderer>() == null) { o.AddComponent<MeshRenderer>(); }
    o.GetComponent<MeshFilter>().mesh = m;
    o.GetComponent<MeshRenderer>().material = mat;

    m.vertices = vv;
    m.uv = new Vector2[] {new Vector2(0,0),new Vector2(0,1),new Vector2(1,1),new Vector2(1,0)};
    m.triangles = new int[] { 0,1,2,0,2,3 };
    m.RecalculateBounds();
    m.RecalculateNormals();
    o.transform.Rotate(new Vector3(270,0,0));
    o.transform.Rotate(new Vector3(0,0,270));
    o.transform.position = new Vector3(x,z,y);

    return o;
}

也许也禁用MeshRenderer ,然后重新启用它?

myGO.GetComponent<MeshRenderer>().enabled = false;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM