Unity: деактивировать GameObject при создании

Я создаю GameObject (прямоугольник с текстурой) во время выполнения при запуске своего приложения и хочу отобразить его позже. Но если я ставлю его неактивным сразу (myGO.setActive(false)) или даже пока он его еще создает (сразу после GameObject o = new GameObject()), он появляется на секунду, затем снова исчезает.

Я знаю, что я мог бы создать GameObject в первый раз, когда это действительно необходимо, но я хочу выполнить всю настройку таким образом, отображая экран загрузки.

Можно ли сразу сделать GameObject неактивным, когда он будет готов, но до того, как он будет отображаться?

Код (сокращенная версия):

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;
}

person Neph    schedule 02.08.2018    source источник
comment
вы можете оставить его с отключенным рендерером или, если вы создаете экземпляр динамически, вы можете отключить его до вызова метода создания экземпляра.   -  person Daniel    schedule 02.08.2018
comment
@Daniel Для него нет готовых элементов, поэтому создание экземпляров такого рода не происходит. ;) Отключение рендера сработало, спасибо!   -  person Neph    schedule 03.08.2018


Ответы (1)


Может быть, также отключить MeshRenderer, а затем снова включить его?

myGO.GetComponent<MeshRenderer>().enabled = false;
person AKX    schedule 02.08.2018
comment
Делать это прямо перед тем, как сделать GO неактивным, кажется слишком поздно, поэтому я поставил его сразу после o.GetComponent<MeshRenderer>().material = mat;, и теперь он не появляется ни на секунду. Спасибо! - person Neph; 03.08.2018