Publicado en 7 de junio, 2017
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:
- 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.
- 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.
- 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.
Comentarios recientes