Digamos que eu tenho uma variável chamada button
type, Button
que é obviamente System.Serializable
.
Eu quero que essa variável seja atribuível através do inspetor, então eu faço isso public
:
public class SomeScript : MonoBehaviour{
public Button button;
}
O que me dá isso:
Agora, quero manter o código limpo e seguro (organizado) e há uma verdadeira razão pela qual preciso preservar o encapsulamento.
Eu sei que existem várias maneiras de recuperar componentes em tempo de execução como transform.Find("Some/Genius/TypeUnsafe/Path")
ou GameObject.Find("3 seconds scene iteration").GetComponent(...).
eu quero evitar isso.
Como misturo uma variável private access
com ela public access
no inspetor?
unity
serialization
Jacob
fonte
fonte
private
não se destina realmente a impedir que terceiros obtenham acesso a um campo, serve para fornecer uma maneira de dizer "não olhe atrás da cortina para o que estou realmente fazendo" - ou seja, é principalmente uma maneira de impedi- lo de obter acesso a ele.UI
/API
MVC
/MVVM
padrão para um aplicativo enorme (um cliente de jogo na verdade) e eu tive que separar oUI
arquivoAPI
. Eu precisava atribuir valores através da causa do inspetor simplesmente - não há outra maneira.Find()
Os métodos são do tipo inseguro e é mais fácil juntar as coisas arrastando e soltando. É muito, muito difícil criar uma estrutura clássica de POOUnity
e você precisa procurar coisas hacky como essa.Respostas:
Você está procurando o atributo SerializeField
Dos documentos:
Seu código ficaria assim:
fonte
[SerializeField] private Button button;
facilitar a leitura, geralmente escrevo tudo em uma linha: acho mais fácil digitalizar quando há vários campos seguidos. Além disso, estrague os documentos para "você quase nunca precisará disso"; Eu faço isso o tempo todo.Você pode mostrar sua variável privada Adicionando o atributo SerializeField antes da variável. Algo assim
A variável acima será exibida ao seu inspetor, mas suas outras classes não conseguirão obtê-la. Por outro lado, você também pode ocultar seu público arquivado no inspetor por meio do atributo HideInInspector . Algo assim
Sua variável acima será acessível por seu outro script, mas não será exibida ao inspetor.
fonte