2016-09-27 4 views
0

どのように私は(敵)ゲームオブジェクトの非一様ランダム生成を作成します。 enter image description hereスポーンゲームオブジェクトの大群、生成されたオブジェクトの濃度を変更

私はそこにしたいです前方に多くのゲームオブジェクトになり、後方に行くにつれてゲームオブジェクトが少なくなります。私は、空のゲームオブジェクトを作り、敵がこのようなコードをターゲットに持つと考えた:

public Vector3 target : Transform; 
if (target == null && GameObject.FindWithTag("Empty")) 
{ 
     target = GameObject.FindWithTag("Empty").transform; 
} 

しかし、それを行うことは私に戻って彼のint少ないがある「道」効果を与えないだろう。

void SpawnHorde() 
{ 
    for (int i = 0; i < hordeCount; i++) 
    { 
     Vector3 spawnPosition = new Vector3(Random.Range (0, 200), 50, Random.Range (0, 200)); 
     Instantiate(Resources.Load ("Prefabs/Sphere"), spawnPosition, Quaternion.identity); 
    } 
} 

を誰もがこれを達成するためにどのようにとの提案を持っています。ここでは

は、それが助け場合は、ランダムに敵を生成するための私のコードですか?ジェリーのコード@実装した後

マイ結果:

party in the front

前にもっと集中。後ろに少なく:

+2

あなたは画像の上に取ると、XY軸系に入れている場合は、左から右へと段階的に調整し、各X座標またはどのように多くの敵をランダムにオフセットを伝える機能を持っているXを通過することができYラインに沿って出現する。たとえば、X = 0でランダムに10個の敵を、次にX = 1で7個の敵をランダムに発生させます。指数関数的なフォールオフ( 'e ^( - x)')や線形フォールオフ( '-ax + b')多分二次的だろうか? X座標が進むにつれて数学的にYライン上の敵の数を表すことができればいいほど良い結果が得られます。 –

+1

ランダムは範囲内の乱数を生成し、一般的にはその範囲内で時間の経過とともにかなり均等に分布します。あなたは本当に乱数の平均と標準分布を設定できるようにしたい。私は[この質問](http://stackoverflow.com/questions/18807812/adding-an-average-parameter-to-nets-random-next-to-curve-results?noredirect=1&lq=1)をチェックアウトします。その答えは、あなたのx軸の値に対してこのタイプの分布を作る方法を示しています。 – Lithium

+1

インスピレーションが必要な場合は、2つの線形関数(ここでは 'y = -2x + 100'と' y = 2x - 100')を取ることができます。 'x = 0〜x = 50'であればスポーンしたいそれはあなたが望んでいた素晴らしい "トレイル"を提供します。今度は、低いx値はより多くの敵が生まれたことを意味し、高いx値は生み出される敵の数が少ないことを意味します(線形Lerping?))、あなたは敵の道を持っています。 (http://i.stack.imgur.com/FpdOd.png) –

答えて

1

私はマクシミリアンゲルハルトの提案に行きます。あなたが望むようにそれを微調整するための生の実装がいくつかあります。微調整するのが最も重要なのは、ある列に配置すること、いくつかの乱数で達成できることです。

void SpawnHorde() 
    { 
     int hordeCount = 200; 
     float xPosition = 0; 

     const int maxInColumn = 20; 

     while (hordeCount > 0) 
     { 
      int numberInColumn = Random.Range(5, maxInColumn); 
      hordeCount -= numberInColumn; 

      if (hordeCount < 0) 
       numberInColumn += hordeCount; 

      for (int i = 0; i < numberInColumn; i++) 
      { 
       Vector3 spawnPosition = new Vector3(xPosition, 50, Random.Range(0, 100)); 
       Instantiate(Resources.Load("Prefabs/Sphere"), spawnPosition, Quaternion.identity); 
      } 

      xPosition += (float)maxInColumn * 2f/(float)hordeCount; 
     } 
    } 
+0

ありがとう!私は自分の好きなものにいくつかのものを微調整しました。 '' zPosition + =(float)maxInColumn * 20f /(float)hordeCount; '2fの代わりに' 20f'にして、より広がるようにしました。私の地形に基づいて、それゆえ 'zPosition'。あなたの答えを見る直前に、 'for'ループを使って自分の解決策を見つけて、場所によっては各ループのオブジェクトの量を減らしましたが、私はあなたの答えがよかったです!私は完成した製品の添付されたイメージで私の応答を編集するつもりです。再度ありがとう – crin

+0

@crin私は助けることができてうれしい!私はあなたのイメージを見ました - あなたは戦闘員が同じxにならないようにコラムポジションでプレイすることができます - 今は一般的に見えます。乾杯 –

関連する問題