Recentemente ho riscontrato alcuni problemi con il semplice passaggio di riferimenti a oggetti/nemici in un gioco che sto facendo e mi chiedo se sto usando l'approccio sbagliato.Quando scrivi un gioco, dovresti creare oggetti/nemici/ecc. avere numeri ID univoci?
Il problema principale che ho è lo smaltimento di nemici e oggetti, quando altri nemici o giocatori possono ancora avere collegamenti a loro.
Ad esempio, se si dispone di un coniglio e un lupo, il lupo potrebbe aver scelto il coniglio come bersaglio. Quello che sto facendo è che il lupo ha un GameObject Target = null;
e quando decide che è affamato, il bersaglio diventa il coniglio. Se poi il Coniglio muore, come un altro lupo che lo uccide, non può essere rimosso dal gioco correttamente perché questo lupo ha ancora un riferimento ad esso.
Inoltre, se si utilizza un approccio disaccoppiato, il coniglio potrebbe colpire da un fulmine, riducendo la sua salute a sotto zero. Quando si aggiorna da solo, si rende conto che è morto e viene rimosso dal gioco ... ma non c'è modo di aggiornare tutto ciò che è interessato a esso.
Se si assegnava a ciascun nemico un ID univoco, è possibile utilizzare semplicemente i riferimenti e utilizzare una classe di ricerca centrale che la gestisse. Se il mostro fosse morto, la classe di ricerca avrebbe potuto rimuoverlo dal proprio indice, e successivamente qualsiasi tentativo di accedervi sarebbe stato informato che era morto, e quindi avrebbero potuto agire di conseguenza.
Qualche idea su questo?
Perché non hai qualche evento "AnimalDied" o "HealthChanged" a cui un animale da caccia potrebbe iscriversi? Quando questi eventi sparano, il cacciatore potrebbe decidere autonomamente se interrompere la caccia a quella preda e annullare la sottoscrizione a quegli eventi. Una iena probabilmente vorrebbe ancora cacciare un coniglio morto, ma un lupo potrebbe non essere interessato nemmeno a un coniglio debole, figuriamoci a un morto. – slugster