2015-08-16 3 views
1

В моей игре, если игрок впервые играл в игру, у меня появляется изображение, которое отображается. Я его экземпляр на холсте, как так: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(); 
    } 

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

Режим рендеринга холста установлен на «Экранное пространство - Наложение», и оно установлено в 0 в порядке сортировки. Созданный игровой объект также имеет порядок сортировки 0 и находится в слое по умолчанию.

Ничего не пробовал. Значения z не имеют значения и даже помещают холст и объект-экземпляр в уровень по умолчанию и устанавливают холст в порядке сортировки 2, а экземпляр-экземпляр для порядка сортировки 1 (поэтому он отображается первым) не создает разница.

ответ

1

Что вы хотите использовать transform.SetAsLastSibling(). CanvasRenderer отображает GameObject с в соответствии с их индексом родства (позиция в иерархии) сверху вниз.

Однако после изучения вашего кода я заметил что-то, и я должен сказать, что если вы пытаетесь создать экземпляр встроенного экрана, я бы настоятельно рекомендовал его создать с его собственным Canvas вместо того, чтобы воспитывать его в существующем. Что-то, что значимо должно иметь свое собственное выделенное Canvas.

Обновление: проблема заключается в том, что вы создаете GameObjects с помощью рендера рендера transform и Sprite. Canvas UI получает визуализированный последний, над всеми слоями сетки, поэтому, если вы хотите, чтобы ваш новый экземпляр GameObjects участвовал, вместо этого они должны будут содержать RectTransform и Image.

+0

После добавления transform.SetAsLastSibling() как к холсту, так и к вновь созданным объектам игры в отдельных попытках вновь созданный объект игры по-прежнему появляется за старыми элементами холста. – saboehnke

+0

И у них есть 'RectTransform'? И компоненты 'Image'? – maksymiuk

+0

Недавно созданный объект игры имеет преобразование и средство создания спрайтов. Вот и все. Это сборник, который я создаю. – saboehnke

0

Вместо уровня по умолчанию изменить его слой на пользовательский интерфейс.

+0

, для которых один? Холст или вновь созданный объект? – saboehnke

+0

Оба холста и gameobject должны быть в слое ui. – Nain

+0

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

0

Вы код кажется прекрасным, это может быть проблема, связанная с игровым объектом, где этот скрипт присоединен (потому что вы передаете transform.position в Instantiate). это может быть позиционирование объекта «Инициированный игра» с холста. Попробуйте это, как только это может сработать.

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

и после установки его родителя (очень важно), установить его положение как этот

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

Я пробовал все, что вы сказали, и это не имело никакого значения. Он по-прежнему появляется за другими объектами холста. – saboehnke