Unity- Manejar los Tag y los Layers de manera facil en scripts

Los Tag y los Layers son muy usados en Unity, pero también muy factibles a que nos generen problemas. De manera básica los Tags permite comparar GameObject por tag para si tienes muchos tipos de enemigo, pero solo quieres saber si es enemigo y no de su tipo, solo puedo preguntar por su tag (Uso común en los Collision y Trigger) y los Layers funcionan para indicarle a la camara que GameObjects puede ver y cuales no, en las luces sobre que GameObject puede iluminar y cuales no y por ultimo en las físicas para hacer que por ejemplo las balas no puedan colisionar entre ellos (Matrix de colisión) o que un Raycast ignore ciertos objetos, entre sus principales usos.

Ambos presentan algunos problemas al trabajar con ellos dentro de un script:

  1. En caso de Tag podemos escribir «player» y este no va funcionar porque es con ‘P’ mayúscula y esto no hay manera hasta el ya probar si estamos en lo correcto o no.
  2. Si en un script comparamos con el Tag de «Pared» y pasa el tiempo y según nosotros no se utiliza y lo eliminamos de la lista de Tags, Unity no te notificara si hay un script que lo este utilizando o no, solo dejaran de hacer lo que esperamos estos scritps, en pocas palabras no sabemos si se utiliza o no en scripts un Tag.
  3. En Layers las operaciones o suelen ser ‘ 1 << NumeroLayer ‘  o ‘ 1 << LayerMask.NameToLayer («MiLayer») ‘ donde o no sabemos bien que numero es cada layer o en el caso dos, el mismo problema con los Tags no sabemos si esta bien escrito o en caso de eliminarlo no saber de manera inmediata si lo esta utilizando o no un script.

Una solución aparte de ser cuidadoso, es crear un script que tenga puras constantes con los nombres de los Tags y Layers para tenerlos en un lugar y actualizarlos de manera manual cualquier cambio. Entonces se puede generar un script que genere este script de manera automática con el fin que sea más rápido y estar 100% que se escribe de manera correcta.

Al final pongo el código del script que solo debes agregar a tu proyecto y debe estar dentro de una carpeta llamada ‘Editor’ y en ‘Edit / Generate Constants Classes’  y se auto generan los scripts. Con esto ya en cualquier script en vez de compara el Tag de «Player», solo debes usar ‘ k.Tags.PLAYER’ el cual es un string constante, esto asegura que el string esta correctamente escrito y si se llegara eliminar el Tag al actualizar los archivos,  como los scripts hacen referencia a una variable, marcaría un error en todos los scripts que necesitan ese Tag y se aplica lo mismo con los Layers. De esta manera resolvemos los problemas mencionados anteriormente.

 

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.