Estoy usando Unity para crear un juego 2D de arriba hacia abajo. Todo ha sido genial hasta ahora, pero me he encontrado con un problema que no puedo resolver adecuadamente.
Quiero implementar "áreas altas de hierba" donde se ocluya parte del personaje.
Un ejemplo visual:
Pensé en hacer la hierba alta por capas, pero eso crearía MUCHOS objetos del juego, y la transición a medida que el personaje se mueve hacia arriba no será lo suficientemente suave.
¿Alguna idea sobre cómo podría abordar esto? Pensé que tal vez usando shaders podría lograr algo como esto, pero mi conocimiento sobre shaders es muy limitado, por lo que ni siquiera sé si eso es posible.
Respuestas:
Estoy de acuerdo con @Christian (aunque no lo llamaría un hack). Detecta la condición cuando el objeto debe verse diferente y luego simplemente dibuja diferente. Cada cosa en el juego no tiene que ser un "modelo" de cómo funciona en la "naturaleza". Es un error que he cometido muchas veces, por lo que se ha convertido en un mantra para mí. Pregúntese esto: ¿qué ganaría si el arbusto ocluye al jugador "de manera realista" en lugar de simplemente dibujar al jugador como debería verse? Puse esto entre comillas, porque al tratar de imaginar cómo se vería esto, creo que el enfoque de oclusión en capas en realidad puede parecer inferior.
Si su preocupación con el enfoque de @ Christian está en la gestión de la lista "potencialmente ilimitada" de pequeñas cosas que debe verificar en cada cuadro, este es otro error que he cometido muchas veces. Te recomiendo que "sigas con esto" por ahora y compruebes periódicamente cuánto tiempo ha pasado la lista, y si realmente se ha convertido en un problema . Una de dos cosas sucederá. O no se ha convertido en un problema, en cuyo caso, ¿por qué estás tratando de resolverlo? O lo ha hecho y necesita diseñar una solución (mínima) para resolverlo. No trate de resolver por la simulación de la misma.
fuente
¡Finalmente encontré una solución satisfactoria! El comentario de @Thebluefish me señaló la dirección correcta con máscaras.
La idea es usar un sombreador que dibuje al personaje en dos pasadas:
Esto se hace incluso cuando el personaje no está dentro de los arbustos. De esta manera no tengo que detectar colisiones contra los arbustos, y también hace que la transición dentro del arbusto sea suave en casos límite como este:
La mitad del personaje que está fuera del arbusto se representa en la primera pasada. La otra mitad estará completamente ocluida por el arbusto.
En la segunda pasada, el personaje enmascarado se volverá a representar. La parte fuera del arbusto seguirá siendo la misma, pero la parte dentro del arbusto se representará en la parte superior con la máscara en la parte superior del arbusto, haciendo que parezca que está dentro del arbusto.
fuente
Puedes detectar si el personaje está o no en la hierba. Luego dibuja solo la mitad superior del personaje.
fuente