Powiedzmy, że mam zmienną o nazwie button
type, Button
która jest oczywiście System.Serializable
.
Chcę, aby ta zmienna była przypisywalna przez inspektora, więc robię to public
:
public class SomeScript : MonoBehaviour{
public Button button;
}
Co daje mi to:
Teraz chcę, aby kod był czysty i bezpieczny (zorganizowany) i istnieje prawdziwy powód, dla którego muszę zachować enkapsulację.
Wiem, że istnieje wiele sposobów pobierania składników w środowisku wykonawczym, takich jak transform.Find("Some/Genius/TypeUnsafe/Path")
lub GameObject.Find("3 seconds scene iteration").GetComponent(...).
chcę tego uniknąć.
Jak mieszać zmienną private access
z nią public access
w inspektorze?
unity
serialization
Jakub
źródło
źródło
private
tak naprawdę nie ma na celu uniemożliwiać stronom trzecim uzyskania dostępu do pola, ma na celu dać możliwość powiedzenia: „nie patrz za zasłonę na to, co naprawdę robię” - to w większości sposób uniemożliwić ci dostęp do niego.UI
/API
MVC
/MVVM
dla ogromnej aplikacji (właściwie klienta gry) i musiałem oddzielićUI
odAPI
. Musiałem po prostu przypisać wartości przez inspektora, bo po prostu - nie ma innego wyjścia.Find()
metody są niebezpieczne dla typu i łatwiej jest łączyć rzeczy poprzez przeciąganie i upuszczanie. Naprawdę, bardzo ciężko jest zbudować klasyczne środowisko OOPUnity
i trzeba szukać takich hackerskich rzeczy.Odpowiedzi:
Szukasz atrybutu SerializeField
Z dokumentów:
Twój kod wyglądałby wtedy następująco:
źródło
[SerializeField] private Button button;
łatwiej mi skanować, gdy w rzędzie jest kilka pól. Ponadto, przykręć dokumenty dla „prawie nigdy nie będziesz tego potrzebować”; Cały czas to robię.Możesz pokazać swoją zmienną prywatną, dodając atrybut SerializeField przed zmienną. Coś takiego
Powyższa zmienna zostanie wyświetlona inspektorowi, ale inne klasy nie będą w stanie jej uzyskać. I odwrotnie , możesz również ukryć swoje publiczne dane złożone w inspektorze za pomocą atrybutu HideInInspector . Coś takiego
Powyższa zmienna będzie dostępna dla drugiego skryptu, ale nie będzie wyświetlana inspektorowi.
źródło