Erba alta Unity2D


8

Sto usando Unity per creare un gioco top-down 2D. Finora è stato tutto perfetto, ma ho riscontrato un problema che non riesco a risolvere correttamente.

Voglio implementare "aree con erba alta" in cui parte del personaggio verrà occlusa.

Un esempio visivo:

Ho pensato di creare l'erba alta per strati, ma ciò creerebbe MOLTI oggetti di gioco e la transizione mentre il personaggio si alza non sarà abbastanza regolare.

Qualche idea su come potrei affrontare questo? Ho pensato che forse usando gli shader avrei potuto ottenere qualcosa del genere, ma la mia conoscenza degli shader è molto limitata, quindi non so nemmeno se tale cosa sia possibile.


6
A volte devi lavorare con MOLTI oggetti di gioco, sai.

Una sorta di hack per evitare ulteriori oggetti di gioco sarebbe quello di sostituire lo sprite del giocatore con una versione personalizzata "isInGrass" dello sprite (esempio molto rozzo qui ) mentre è nell'erba e basta disegnarlo sopra. Con un po 'di arte e un po' di trasparenza nella parte inferiore (per aiutarlo a fondersi con l'erba reale) potrebbe sembrare abbastanza buono.
Christian,

Ho pensato a quell'approccio ma, oltre a tutto il lavoro che richiederebbe (avremmo bisogno almeno del doppio di animazioni per ogni attore), il passaggio dall'esterno dell'erba all'interno dello scenario laterale (nell'immagine di esempio: riga superiore , terza colonna), quando metà del corpo è all'interno e l'altra metà è all'esterno, il risultato sarebbe piuttosto disordinato.
Leo,

2
Sembra una maschera o uno stencil è ciò di cui hai bisogno. Questa discussione contiene alcune informazioni utili. Questa estensione dimostra di cosa sto parlando, anche se non so se farà esattamente ciò di cui hai bisogno.

1
Sembra quasi quello che stavo cercando! Dovrò fare qualche ricerca e sperimentarlo. Se riesco a far funzionare qualcosa, lo pubblicherò come risposta.
Leo,

Risposte:


1

Sono d'accordo con @Christian (anche se non lo definirei un hack). Rileva la condizione in cui l'oggetto dovrebbe apparire diverso e quindi disegnalo in modo diverso. Ogni singola cosa nel gioco non deve essere un "modello" di come funziona in "natura". Questo è un errore che ho fatto molte volte e quindi è diventato una specie di mantra per me. Chiediti questo: cosa guadagneresti se il cespuglio occludesse il giocatore "realisticamente" invece di disegnare il giocatore nel modo in cui dovrebbe apparire? Lo metto tra virgolette, perché nel tentativo di immaginare come sarebbe questo penso che l'approccio dell'occlusione a strati potrebbe effettivamente sembrare inferiore.

Se la tua preoccupazione per l'approccio di @ Christian è nel gestire la lista "potenzialmente illimitata" di piccole cose che devi controllare ogni frame, questo è un altro errore che ho fatto molte volte. Ti consiglierei "seguitelo" per ora e controllare periodicamente da quanto tempo è effettivamente arrivato l'elenco e se è effettivamente diventato un problema . Accadrà una delle due cose. O non è diventato un problema, nel qual caso - perché stai cercando di risolverlo? Oppure ha e devi progettare una soluzione (minima) per risolverlo. Non cercare di risolverlo facendo la simulazione di esso.


0

Finalmente ho trovato una soluzione soddisfacente! Il commento di @Thebluefish mi ha indicato la giusta direzione con le maschere.

L'idea è di usare uno shader che disegna il personaggio in due passaggi:

  • Nel primo passaggio il personaggio è reso normalmente, MA essendo completamente dietro i cespugli.
  • Nel secondo passaggio lo disegno di nuovo, usando una maschera che disegna la parte superiore del personaggio, sopra i cespugli.

Questo viene fatto anche quando il chatacter non è all'interno dei cespugli. In questo modo non devo rilevare nuovamente le collisioni tra i cespugli, e inoltre rende la transizione all'interno del cespuglio regolare su casi limite come questo:

La metà del personaggio che si trova fuori dal cespuglio viene renderizzata nel primo passaggio. L'altra metà sarà completamente occlusa dal cespuglio.

Nel secondo passaggio il personaggio mascherato verrà nuovamente visualizzato. La parte esterna al cespuglio rimarrà la stessa, ma la parte all'interno del cespuglio sarà resa in cima con la maschera sopra il cespuglio, facendola sembrare all'interno del cespuglio.


-1

Puoi rilevare se il personaggio è nell'erba. Quindi disegna solo la metà superiore del personaggio.


Credo che questa risposta sia già stata suggerita. Hai ulteriori dettagli da aggiungere alla tua risposta?
MichaelHouse
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.