Я делаю трехмерную игру в единстве, где игрок может взаимодействовать с изображениями и заметками (примерно 3-4 абзаца).

Я создал холст, когда игрок взаимодействует с заметками на земле, появляется меню (холст).

Интересно, есть ли способ хранить строковые переменные с изображением GameObjects в том же массиве? Кроме того, я собираюсь использовать эти изображения на холсте, поэтому я должен создать как изображение или как спрайт?

0
runoraca 27 Май 2019 в 18:19

2 ответа

Лучший ответ
  1. Если вы хотите, чтобы они были компонентами пользовательского интерфейса, вы должны создать компоненты Image.

  2. Я полагаю, что вы можете достичь этого, определив свой список двух общих предков объектов; Object :

var list = new List<object>();

list.Add("Hello");
list.Add(5);
list.Add(MyImage);

foreach (object obj in list) 
{
    if (obj is string) 
    {
        Debug.Log(obj.ToString());
    }
}
0
Fredrik Schön 27 Май 2019 в 15:34

Вы должны использовать общий базовый тип, от которого оба наследуют. Если обе вещи, которые вы хотите сохранить, например, типа MonoBehaviour имеет смысл использовать это как базовый тип вместо object.

public List<MonoBehaviour> List = new List<MonoBehaviour>();

Это, по крайней мере, предоставит вам всю функциональность, которую реализует MonoBehaviour / Component. Это звучит, например, как позже интересует .transform.position.

Если вы говорите о таких вещах, как Image и < a href = "https://docs.unity3d.com/ScriptReference/UI.Text.html" rel = "nofollow noreferrer"> Text вы даже можете использовать UI.MaskableGraphic как общий тип

public List<MaskableGraphic> List = new List<MaskableGraphic>();

Который обеспечивает еще больше свойств, связанных с пользовательским интерфейсом, таких как, например, color или canvas.

0
derHugo 27 Май 2019 в 18:07