Come posso ripulire un numero eccessivo di macerie create dal giocatore?


92

Nel mio ultimo gioco che sto realizzando, puoi dividere arbitrariamente un oggetto 2D, dimostrato in questa gif:

inserisci qui la descrizione dell'immagine

Puoi tagliarlo continuamente in centinaia o migliaia di pezzi. Questo non crea molto ritardo, perché sono sempre in uno stato di fisica del sonno, ma c'è un problema quando li fai muovere.

Non sono davvero sicuro di come gestirlo, quindi non ci sono così tante macerie nel tagliare qualcosa. Non voglio davvero cancellarli dopo un certo periodo di tempo; Non mi piace come, se torni a qualcosa che hai tagliato dopo un po ', è scomparso casualmente.

Come posso ripulire un numero eccessivo di macerie create dal giocatore?


17
Dalla tua domanda non è davvero chiaro cosa desideri veramente. Dici che vuoi "ripulire le macerie", ma allo stesso tempo dici che non vuoi che le macerie scompaiano dopo un po '.
Philipp,

10
Tiny & Big distruggerebbe i pezzi più piccoli. Abbastanza sicuro che i pezzi più grandi siano rimasti per il livello, ma non me lo ricordo completamente. Ecco un esempio: youtu.be/236ly0ApPqg?t=177
TyCobb

2
Le cose fuori portata possono essere rimosse e sostituite quando torni.
Loren Pechtel,

3
Solo la mia piccola opinione, ma impostare una dimensione minima dell'oggetto per essere effettuata dall'azione di taglio. Se è difficile individuare il pezzo che stai tagliando, non puoi tagliarlo. (Solo a parte, belle dinamiche di gioco, questa ha sicuramente le gambe!)
AJFaraday,

12
Vorrei affermare che non mi merito per aver creato il meccanico di taglio poiché è una risorsa gratuita che ho trovato su Github . Ho usato l'esempio che ti dà un'idea su come usarlo per tagliare oggetti. (il giocatore è stato codificato da me e anche tutto il resto del gioco.
Ducktor,

Risposte:


71

Prima di tutto, quella meccanica di gioco sembra che potrebbe essere super divertente, quindi congratulazioni per pensarci! Ecco due semplici soluzioni che potrebbero essere utilizzate in modo indipendente o insieme per risolvere questo particolare problema:

Rimuovi pezzi molto piccoli

Non ha molto senso mantenere piccoli pezzi di collisione che non impediranno al giocatore o avranno alcun effetto reale sull'ambiente. Il calcolo della logica di collisione aggiuntiva semplicemente non ne vale la pena, quindi rimuovere questi pezzi o rimuovere la collisione su di essi.

Limitare i tagli del giocatore

Avere tagli illimitati potrebbe potenzialmente rendere molti dei tuoi puzzle davvero semplici se puoi semplicemente tagliare ogni oggetto che impedisce in un mucchio di poltiglia. Dai al giocatore solo pochi tagli con cui giocare (o fallo ricaricare lentamente nel tempo) e probabilmente scoprirai che rende i tuoi puzzle più impegnativi oltre a eliminare i dolori di affrontare la collisione su mille frammenti.


1
Penso che farò il primo poiché non ho intenzione di creare alcun tipo di gioco puzzle.
Ducktor,

36
Micheal Bay su quando anche i piccoli pezzi scompaiono. Non è un tronco, è segatura. O esplodere segatura. perchè no?!
corsiKa

26
@corsiKa Se aggiungi alcuni effetti fiammeggianti al movimento di taglio, potresti fare in modo che i tagli lascino segni di bruciatura sui punti di contatto, con una certa larghezza. Se l'oggetto è così piccolo da essere completamente "bruciato", potrebbe esplodere in fiamme e bruciare in pochi istanti.
T. Sar - Ripristina Monica il

155

Scopri il tuo collo di bottiglia

Alcune centinaia di oggetti in movimento non dovrebbero essere un problema. Tuttavia, potrebbero esserci alcune centinaia di oggetti in collisione. Ci vorranno alcuni test, ma credo che il collo di bottiglia che hai sia la collisione.

A proposito, di quanti oggetti stiamo parlando? Qual è la piattaforma? Cento oggetti per un gioco per cellulare non equivalgono a cento per un gioco Web o cento oggetti per un gioco desktop.

Prova lo stesso gioco ma con le collisioni tra gli oggetti tagliati disabilitati e vedi se riesci a ritardare quantità simili di oggetti. In tal caso, significa che la mera quantità di oggetti è la causa del problema; in caso contrario, le collisioni sono il problema.

Questo informerà la tua decisione su cosa farai per migliorare le prestazioni. Non tutte le idee di seguito verranno applicate e dovrai comunque eseguire i test.


Non parlerò dell'ottimizzazione per una grande quantità di oggetti lontani dal giocatore, poiché il problema sembra sorgere quando si interagisce con gli oggetti.

c'è un problema quando li fai spostare.

Se il problema si verifica quando si interagisce con gli oggetti, non è chiaro come la rimozione di oggetti non visibili lo risolverà ... tuttavia, suppongo che potrebbe aiutare.

Dirò solo che se gli oggetti lontani dal giocatore sono un problema, potresti iniziare con livelli più piccoli o cercare di dividere il gioco in blocchi che puoi caricare e scaricare a seconda di dove sta andando il giocatore.


Fuori dai limiti

Credo che quando si tratta di ripulire le macerie, la prima cosa da fare è rimuovere gli oggetti fuori limite. Ad esempio, il pezzo che è caduto in una fossa. Se non è possibile che il giocatore sia in grado di arrivarci per vederlo, non c'è motivo di tenerlo in giro.

Tornerò su questo.


Renderlo più realistico (parte 1)

Quando si taglia il legno con una sega, un'ascia o uno strumento simile, si perde materiale (segatura, trucioli, ecc.). Anche se tagli con un laser, il laser brucerà del legno. Inoltre, per cose che non sono in legno, di solito ci saranno deformazioni attorno al taglio, sgretolatura, ecc.

Quello che sto dicendo è che il taglio non è perfetto e un po 'di materiale andrà perso. Puoi modellarlo nel tuo gioco. Quel magico taglio rosso ha spessore. Rimuovi quello spessore dagli oggetti (aggiungi effetti particellari se ti senti troppo in colpa).

Ciò significa che non sarai in grado di tagliare tutto ciò che è più piccolo di quello spessore, infatti, tentando di farlo lo rimuoverà dal gioco. È buono! Significa che c'è un limite superiore alla quantità di macerie che ci sarà, e c'è un modo meccanicamente valido per ripulirlo nel gioco.


Cambia marcia per piccoli oggetti

Funzionerà meglio se le collisioni sono il problema.

Una volta che un oggetto è troppo piccolo, i dettagli delle diverse angolazioni ha meno rilevanza. Potresti passare a un meccanico di collisione meno preciso. Ad esempio, è possibile utilizzare i collider Circle.

Puoi trattare anche oggetti più piccoli senza collisioni tra loro; considera solo la collisione tra loro e gli oggetti agente (come l'avatar del giocatore o i personaggi controllati dall'IA).

Infine, oggetti molto piccoli potrebbero trasformarsi in polvere (effetti particellari).


Renderlo più realistico (parte 2)

Funzionerà meglio se le collisioni sono il problema.

Il materiale si deforma e si rompe sotto pressione. Se ti ritrovi con oggetti lunghi con uno spessore molto ridotto, suddividili in oggetti più piccoli in modo che possano sfruttare la soluzione sopra.

Possiamo far finta che abbia uno spessore troppo piccolo che si sbriciola e si rompe quando lo colpisci.


Unisci oggetti

Funzionerà meglio se il numero di oggetti è il problema.

Un trucco comune che molti giochi usano per gestire grandi quantità di caduta che potrebbero danneggiare le prestazioni è di raggruppare le gocce insieme.

Potresti provare qualcosa di simile per piccoli oggetti vicini l'uno all'altro. Li hanno fatti diventare un singolo oggetto. Tuttavia, non intendo mettere insieme i pezzi. Intendo creare un singolo oggetto per gestire la loro fisica; puoi ancora rappresentare i singoli pezzi che componevano l'oggetto, magari usando tecniche affini agli effetti delle particelle.


Renderlo più realistico (parte 3)

Hai sentito parlare del vento? C'è vento nel mondo reale.

Usa il vento per allontanare piccoli oggetti.

So che può sembrare contro intuitivo, perché significa che i piccoli oggetti non si riposano, almeno non subito. Leggi di seguito prima di esprimere il tuo giudizio.

Puoi usare il vento per allontanare piccoli oggetti prima - o non appena - iniziano ad accumularsi. Che funzionerà meglio se stai usando ottimizzazioni per piccoli oggetti (ad esempio combinandoli o rimuovendo le collisioni tra loro).

Inoltre, se puoi usare il vento per spingere gli oggetti ai box o comunque fuori dai limiti, puoi usare come scusa per rimuovere gli oggetti. Ti avevo detto che sarei tornato su questo. Anche se non lo fai, può servire come una scusa per rimuovere piccoli oggetti che sono troppo lontani dal giocatore, fingi che il vento si sia liberato di loro mentre il giocatore non stava guardando.

Puoi rimuovere alcuni oggetti mentre il giocatore non sta guardando, hai la mia benedizione.

Inoltre, ora hai una scusa per aggiungere vento, che puoi aggiungere vento come parte di altre meccaniche o ostacoli del gioco. Potresti anche aggiungere nella narrazione lo spirito del vento che cerca di mantenere pulite le cose, se sei così incline.

Nota : non è necessario innescare il vento quando ci sono macerie da pulire (anche se funzionerebbe), probabilmente è possibile che il vento avvenga a intervalli casuali.


Beavers!

Arriva qualche fastidioso castoro e ruba il tuo legno!

Ora hai un tipo nemico!

Inoltre, naturalmente, rimuovono il legno mentre non stavi guardando. Puoi persino progettarlo in modo da tornare a vedere un castoro che fugge via con un pezzo di legno che era una pila. Ciò renderebbe un momento memorabile, spiegherà perché il legno è scomparso e risolverà tutti i problemi di prestazione che affronti, tutto in una volta.


Sono tutti compromessi

Ci sono limitazioni della piattaforma o degli strumenti che hai scelto, anche il tempo e il budget che devi sviluppare per giocare sono una limitazione. Non si può fare una perfetta simulazione della realtà, eppure . Nessuno può .

Ogni sviluppatore lavora entro i limiti che la sua piattaforma target e gli strumenti che gli avevano imposto in quel momento, e i migliori giochi hanno dovuto fare dei compromessi per rendere il gioco divertente e coinvolgente ... anche se ciò significa meno realismo, in effetti, spesso sono divertenti e coinvolgenti perché non realistici.

Lascia che la creatività provenga da questi limiti.

Tuttavia, puoi anche rendere il tuo gioco più realistico , selezionando le parti della realtà che sono convenienti per il tuo sviluppo. Considera che a volte rimuovere oggetti che sono lontani dal giocatore è la parte del costo di fare un gioco divertente.


36
Questo post è la risposta definitiva al problema dell'overflow delle macerie. Hai fornito un riepilogo esauriente delle tecniche, mostrando anche chiaramente la necessità di essere creativi e scegliere soluzioni che funzionino per le tue circostanze, mostrando anche come la meccanica e la narrazione possano fluire insieme. Volevo solo dire che ho difficoltà a esprimere come sono impressionato.
Dragomok,

12
Il tentativo di tagliare un oggetto più piccolo della larghezza del raggio non deve necessariamente far scomparire del tutto l'oggetto ma potrebbe invece produrre un oggetto più piccolo. L'importante è che il numero di oggetti possa essere aumentato solo se l'oggetto tagliato supera la larghezza del raggio.
supercat,

1

Il mondo è discreto. Non puoi rendere un oggetto più piccolo di un pixel, quindi non permettere a tali oggetti di esistere. (Questo è simile ad alcuni dei punti di realismo fatti da Theraot .)

In effetti, potresti ottenerlo gratuitamente: il giocatore specifica la sua linea di taglio essenzialmente come una linea discretizzata sullo schermo. L'effetto del taglio è di dividere ogni oggetto nei sotto-oggetti costituiti, rispettivamente, dai pixel sopra o sotto quella linea e dai pixel strettamente sopra di essa. Un oggetto a un pixel non può essere sia sopra che sotto la linea, quindi non può essere tagliato da questo algoritmo.

Se il taglio di tutti i pezzi tagliabili in singoli pixel ti lascerebbe comunque con troppi oggetti da tracciare, potrebbe comunque funzionare una dimensione minima maggiore.

O semplicemente non preoccuparti. Se il giocatore è disposto a passare molto tempo a tagliare gli oggetti in polvere, ovviamente non hanno fretta, quindi possono affrontare il ritardo che hanno causato. ;-)

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.