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!!!

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top