Digamos que tengo una variable llamada buttonde tipo Buttonque es, por supuesto System.Serializable.
Quiero que esa variable se pueda asignar a través del inspector, así que lo hago public:
public class SomeScript : MonoBehaviour{
    public Button button;
}Lo que me da eso:
Ahora, quiero mantener el código limpio y seguro (organizado) y hay una razón real por la que necesito preservar la encapsulación.
Sé que hay varias formas de recuperar componentes en tiempo de ejecución como transform.Find("Some/Genius/TypeUnsafe/Path")o GameObject.Find("3 seconds scene iteration").GetComponent(...).quiero evitar eso.
¿Cómo mezclo una variable private accesscon la que está public accessen el inspector?
                    
                        unity
                                serialization
                                
                    
                    
                        Jacob
fuente
                
                fuente


privateen realidad no tiene la intención de evitar que un tercero obtenga acceso a un campo, está destinado a proporcionar una manera de decir "no mires detrás de la cortina a lo que realmente estoy haciendo", es decir, es principalmente una forma de evitar que tengas acceso a él.UI/APIMVC/MVVMpatrón para una gran aplicación (un cliente de juego en realidad) y tuve que separarUIelAPI. Necesitaba asignar valores a través de la causa del inspector simplemente: no hay otra manera.Find()los métodos no son seguros para el tipo y es más fácil armar las cosas arrastrando y soltando Es muy, muy difícil construir un marco clásico de OOPUnityy hay que buscar cosas extrañas como esta.Respuestas:
Estás buscando el atributo SerializeField
De los documentos:
Su código se vería así:
fuente
[SerializeField] private Button button;facilitar la lectura, generalmente lo escribo todo en una línea: me resulta más fácil escanear cuando hay un montón de campos seguidos. Además, atornille los documentos para "casi nunca necesitará esto"; Realmente hago esto todo el tiempo.Puede mostrar su variable privada agregando el atributo SerializeField antes de la variable. Algo como esto
La variable anterior se mostrará a su inspector, pero sus otras clases no podrán obtenerla. Por el contrario , también puede ocultar su archivo público en el inspector a través del atributo HideInInspector . Algo como esto
Su otra secuencia de comandos podrá acceder a la variable anterior, pero no se mostrará al inspector.
fuente