Скажем , у меня есть переменная button
типа , Button
которая, конечно System.Serializable
.
Я хочу, чтобы эта переменная была назначена через инспектор, поэтому я делаю это public
:
public class SomeScript : MonoBehaviour{
public Button button;
}
Что дает мне это:
Теперь я хочу сохранить код в чистоте и безопасности (организованным), и есть реальная причина, по которой мне нужно сохранить инкапсуляцию.
Я знаю, что есть несколько способов получения компонентов во время выполнения, например, transform.Find("Some/Genius/TypeUnsafe/Path")
или GameObject.Find("3 seconds scene iteration").GetComponent(...).
я хочу избежать этого.
Как мне смешать переменную private access
с этим public access
в инспекторе?
unity
serialization
Иаков
источник
источник
private
на самом деле не предназначен для того, чтобы помешать третьему лицу получить доступ к полю, он предназначен для того, чтобы дать возможность сказать: «Не смотри за кулисы на то, что я на самом деле делаю», то есть это в основном способ помешать вам получить доступ к нему.UI
/API
MVC
/MVVM
шаблон для огромного приложения (игра клиент на самом деле) , и я должен был отделитьUI
отAPI
. Мне нужно было просто присвоить значения через инспектор - другого пути нет.Find()
Методы небезопасны, и их проще соединять, перетаскивая. Это действительно очень сложно создать классический OOP-фреймворк,Unity
и вы должны искать такие хакерские вещи.Ответы:
Вы ищете атрибут SerializeField
Из документов:
Ваш код будет выглядеть так:
источник
[SerializeField] private Button button;
мне легче сканировать, когда в строке есть несколько полей. Кроме того, прикрутите документы к «вам это почти никогда не понадобится»; Я полностью делаю это все время.Вы можете показать свою личную переменную, добавив атрибут SerializeField перед переменной. Что-то вроде этого
Переменная выше будет отображаться вашему инспектору, но другие классы не смогут ее получить. И наоборот, вы также можете скрыть свою открытую область в инспекторе через атрибут HideInInspector . Что-то вроде этого
Ваша указанная выше переменная будет доступна вашему другому сценарию, но она не будет отображаться для инспектора.
источник