Должен ли я включать родительский объект Canvas в префаб пользовательского интерфейса в Unity

У меня есть четыре разных элемента Canvas в моей сцене Unity. Это упорядочивает их по интересам, но также повышает производительность, поскольку мне не нужно перестраивать все элементы, если я загрязню один из них. Я хочу создать префабы каждого, чтобы я мог повторно использовать их в игре, а также чтобы в моем файле сцены было меньше элементов (мне еще предстоит выяснить, почему Unity не реорганизует YAML в соответствии с порядком сцены и иерархией , В настоящее время я не вижу причин, и это делает систему управления версиями огромной проблемой).

Итак, мой вопрос: должен ли я включать Canvas в качестве родительского GameObject в префаб, или я должен сделать первый дочерний префаб (см. изображение)? Я вижу две точки зрения:

  1. С одной стороны, приятно сканировать список элементов в корне сцены, видеть синие объекты и знать, что они автоматически реплицируются между сценами. Кроме того, чем больше объектов хранится в префабе, тем меньше будет загрязнять мой файл YAML.
  2. С другой стороны, со скриптом Canvas Scalar на родительском элементе размеры внутри префаба будут обновляться каждый раз, когда я меняю разрешение/платформу, и я читал, что всегда нехорошо обновлять их вне режима префаба. Другая проблема заключается в том, что элементы пользовательского интерфейса обычно имеют много внешних ссылок для обновления текста и так далее.

иерархия


person ow3n    schedule 31.10.2020    source источник


Ответы (1)


После долгих исследований я пришел к некоторым выводам об ответе:

  1. Как указано в этом выступлении на Unite 2017, выделение островков элементов пользовательского интерфейса по проблемам И тому, как часто они обновлены, чтобы пользовательский интерфейс не влиял на производительность. В видео также говорится, что для достижения этой цели можно использовать несколько холстов внутри других холстов.
  2. Если вы добавите префаб, значения которого обновляются снаружи префаба, они будут отображаться как переопределения этого префаба. Это включает в себя, если вы ссылаетесь на элементы вне префаба внутри него и наоборот (см. изображение). Важно отметить, что эти переопределения невозможно применить к префабу, и в этом-то и суть. Unity признает, что эти изменения произойдут, и именно так они с ними справляются, не ломая префаб или сцену.

Итак, ответ — да, можно без проблем включить родительский объект Canvas в префаб, и вы даже можете организовать его внутри другого Canvas, чтобы все они наследуют одни и те же настройки. Кроме того, поскольку чем больше кода хранится в префабах, тем меньше лишний (неорганизованный) идентичный код в файле .unity YAML (в моем случае с 17 000 строк до чуть менее 5000!), то это рекомендуемый способ.

переопределяет

внешняя ссылка

person ow3n    schedule 31.10.2020