Domanda
Ho un array che è pieno di tutti gli oggetti con il nemico tag. Quando un nemico si avvicina a un altro nemico, deve stare lontano da quel nemico o aggirarlo.
Questo è quello che ho ora:
foreach(Transform enemy in enemies){
if(enemy == this.transform) continue;
enemyPos = enemy;
float enemyDistance = Vector3.Distance(enemy.transform.position, transform.position);
if(enemyDistance < 8){
transform.RotateAround (enemyPos.position, Vector3.up, 360 * Time.deltaTime);
}
}
Se i nemici si avvicinano abbastanza l'uno all'altro, si gireranno l'uno attorno all'altro. Ho anche provato a usare 2 trigger cube per quando un oggetto nemico tocca uno dei cubi, il nemico a cubetto verrà ruotato lontano da esso. Ho anche provato angoli diversi. Ma nessuna fortuna :(
Sto ancora cercando di trovare una soluzione. Ma se hai un'idea migliore a riguardo, il tuo aiuto è molto apprezzato :)
Grazie in anticipo!!!
Soluzione
Il seguente articolo Potrebbe aiutarti.
In breve, il tuo agente si "respinge" a vicenda quando sono sotto la distanza data. Questo è il concetto di "separazione" nel gregge. Ciò che è veramente interessante è che puoi avere una rotazione che dipende dalla distanza (cioè un altro agente molto vicino significa che devi girare forte) e che puoi interagire con più di un agente.
Nello stesso sito, questo Può aiutarti a cercare al giocatore. Combien il metodo dei due e hai agenti che cercano di catturare il giocatore evitando altri agenti.
Saluti Guillaume
Altri suggerimenti
Hai diversi oggetti in movimento e alcuni di essi potrebbero ostacolare altri oggetti. Propongo di rinviare lo spostamento di tutti quegli oggetti che hanno un ostacolo in movimento di fronte a loro. Quando tutti gli oggetti a movimento libero vengono spostati, prova a spostare tutti gli altri, ripetendo la procedura, perché nel processo alcuni oggetti potrebbero diventare liberi. Essenzialmente si esegue il ciclo tramite elenco di oggetti non ancora in movimento fino a quando non ci sono modifiche nell'elenco.
Se non trovi nuovi oggetti a movimento libero, affronta il resto come preferisci. Suggerirei di provare a trovare un percorso alternativo solo per uno di essi, quindi ripetere la procedura sopra. Potrebbe essere che quando un oggetto è sbalordito, anche tutti gli altri sono sbalorditi. È possibile ripetere questa seconda procedura per il resto degli oggetti bloccati.