A la hora de trabajar con Unity, veo tanto en foros, videotutoriales, como cursos pagados por mi bolsillo, de gente que está certificada por Unity (vamos que no son principiantes en esto) un comportamiento que me resulta peculiar.
Supongamos que dispongo de un GameObject en el editor, y ese GameObject consta de varios componentes, por ejemplo, supongamos que tiene asociado un RigidBody.
Resulta que se realiza un script para hacer X tarea y que va a asociado al GameObject mencionado previamente, y va necesitar interactuar con el componente Rigidbody del GameObject.
El comportamiento peculiar, es que veo que en muchos casos, definen una variable pública de tipo Rigidbody con nombre "rb" y que nunca inicializan, trabajan con ella, guardan el script.
Asocian el script al GameObject como un segundo componente, y arrastran el componente RigidBody a la variable rb del componente script del GameObject.
Yo no lo hago así.
En mi caso, hago exactamente lo mismo que ellos al definir el script, pero, si lo inicializo mediante código, para ello, utilizo una función del tipo:
void Awake{
rb = this.GetComponent<RigidBody>()
}
De esa manera no tengo que arrastrar el componente desde el editor y entiendo que tengo un script autoconfigurable.
¿Es mejor mi manera de hacerlo, o la otra tiene algún sentido?
Otra aspecto de interés, es que veo que mucha gente cuando necesita obtener un componente en un script para hacer algo con el, utiliza con frecuencia el GetComponent<TipoComponente>().
Me parece un error cuando lo utilizan varias veces, es decir, en la linea 4 del código usas GetComponent<X>() y en la línea 18 usas GetComponent<X>() de nuevo, porque si vas a necesitar un componente, puedes ejecutar ese GetComponent en el Awake y almacenarlo en una variable para tenerlo accesible si vas a usarlo en otras ocasiones.