¿Cómo hacer que un campo sea visible (conectable) en el inspector pero inaccesible a través del código (privado)?

Digamos que tengo una variable llamada button de tipo Button que es, por supuesto, System.Serializable .

Quiero que esa variable se pueda asignar a través del inspector, por lo que la hago public :

 public class SomeScript : MonoBehaviour{ public Button button; } 

Lo cual me da eso:

enter image description here

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 múltiples forms de recuperar componentes en time de ejecución como transform.Find("Some/Genius/TypeUnsafe/Path") o GameObject.Find("3 seconds scene iteration").GetComponent(...). Quiero evitar eso.

¿Cómo puedo mezclar un private access variable con su public access en el inspector?

Está buscando el atributo SerializeField

De los documentos:

Force Unity para serializar un campo privado.

Casi nunca necesitarás esto. Cuando Unity serializa sus scripts, solo serializará los campos públicos. Si además de eso, también desea que Unity serialice uno de sus campos privados, puede agregar el atributo SerializeField al campo.

Su código se vería así:

 public class SomeScript : MonoBehaviour{ [SerializeField] private Button button; } 

Puede mostrar su variable privada agregando el atributo SerializeField antes de la variable. Algo como esto

 [SerializeField] private Button button; 

La variable anterior se mostrará a su inspector, pero sus otras classs no podrán getla. Por el contrario , también puede ocultar su file público en el inspector a través del atributo HideInInspector . Algo como esto

 [HideInInspector] public Button button; 

Su otra secuencia de commands tendrá acceso a su variable anterior, pero no se mostrará al inspector.