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?
UI
/ API
MVC
/ MVVM
dla ogromnej aplikacji (właściwie klienta gry) i musiałem oddzielić UI
od API
. 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 OOP Unity
i trzeba szukać takich hackerskich rzeczy.
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.