0

Enemyというタグが付いたすべてのオブジェクトで満たされた配列があります。ある敵が他の敵に近づくとき、それはその敵から遠ざかるか、それを回避しなければなりません。

これは私が今持っているものです:

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);
    }
}

敵が互いに十分に近づくと、敵はお互いを一周します。また、敵のオブジェクトが立方体の1つに触れると、立方体の敵がそれから離れる方向に回転するために、2つの立方体トリガーを使用しようとしました。また、さまざまな角度を試してみました。しかし運がない:(

私はまだ解決策を見つけようとしています。しかし、あなたがこれについてより良い考えを持っているなら、あなたの助けは大いに感謝されます:)

前もって感謝します!!!

4

2 に答える 2

2

いくつかの動くオブジェクトがあり、それらのいくつかは他のオブジェクトの邪魔になる可能性があります。前方に移動障害物があるすべてのオブジェクトの移動を延期することをお勧めします。すべての自由に動くオブジェクトが移動したら、その過程で一部のオブジェクトが自由になる可能性があるため、手順を繰り返して、他のすべてのオブジェクトを動かしてみてください。基本的に、リストに変更がなくなるまで、まだ移動されていないオブジェクトのリストをループします。

新しい自由に動くオブジェクトが見つからない場合は、残りのオブジェクトを好きなように処理します。そのうちの1つだけの代替ルートを見つけてから、上記の手順を繰り返すことをお勧めします。1つのオブジェクトがスタック解除されると、他のすべてのオブジェクトもスタック解除される可能性があります。スタックしたオブジェクトの残りの部分について、この2番目の手順を繰り返すことができます。

于 2011-03-20T17:44:08.530 に答える
1

次の記事が役に立ちます。

つまり、エージェントは、指定された距離内にあるときに互いに「反発」します。これが群れの「分離」の概念です。本当に興味深いのは、距離に応じて回転できること(つまり、非常に近い別のエージェントは、強く曲がる必要があることを意味します)、および複数のエージェントと対話できることです。

同じサイトで、これはプレーヤーの検索に役立ちます。2つの方法を組み合わせると、他のエージェントを避けながらプレーヤーを捕まえようとするエージェントがいます。

ギヨームよろしく

于 2011-03-21T12:25:20.237 に答える