2017-08-15 1 views
0

私は学生で、Unity3Dエンジンで学びます。私は最初の小さな2Dゲームに取り組んでいます。spawerのゲームロジック

私はいくつかのゲームロジックについて助けが必要です。具体的には、ゲームオブジェクトを4列に合理的に生成する方法。このゲームでは、スクリーンの上から落ちるゲームオブジェクトを生成します。私は画面をカバーする4つの列を計算します。この4つの列にランダムにゲームオブジェクトを生成します。しかし、ゲームプレイは良くありません。私はより良いやり方をアドバイスする必要があります。

私のアイデアは、1つまたは複数のゲームオブジェクトを行内に生成し、列を合理的に回転させます。私はすでに行にオブジェクトを生成します。しかし、スイッチ列のロジックを作成する方法はありますか?スイッチ(今最初の列、今第三、今第一及び第四など)のようなもの

私のスポーン方法があります:

// Use this for initialization 
void Start() 
{ 
    // width of one colums 
    widthColum = ScreenCalc.DivideScreenInColums(colums); 

    ... 
} 

public void StartSpawn() 
{ 
    spawn = StartCoroutine(Spawn());  
} 

IEnumerator Spawn() 
{ 
    yield return new WaitForSeconds(1.5f); 
    time = GameController.instance.time; 
    while (true) 
    { 
      // Random select from prefabs 
      GameObject geometryObject = spawnObjects[Random.Range(0, spawnObjects.Length)]; 
      // X is middle of random picked columns 
      float x = ScreenCalc.GenerateColumPos(geometryObject, colums); 
      Vector3 spawnPosition = new Vector3(x, transform.position.y, 0.0f); 
      Quaternion spawnRotation = Quaternion.identity; 

      // Random object in row, will be spawned in one column 
      int rnd = Random.Range(1, 6); 

      // Spawn random count game object in one row 
      for (int i = 0; i < rnd; i++) 
      {     
       GameObject temp = Instantiate(geometryObject, spawnPosition, spawnRotation); 

       // Get Sprite render 
       SpriteRenderer sr = temp.GetComponent<SpriteRenderer>(); 

       // Change color of game object 
       sr.color = colors[Random.Range(0, colors.Length)]; 

       // Get script for falling down 
       FallingDown fl = temp.GetComponent<FallingDown>(); 
       // Increase fall 
       fl.fallSpeed += 0.1f; 
       // Wait between spawns 
       yield return new WaitForSeconds(Random.Range(0.35f, 1.0f)); 
      } 
      yield return new WaitForSeconds(1.0f); 
} 

私はより多くのスポーン方法、各列のいずれかを実行しようとしたランダムな待ち時間を生成します時間。しかし、論理が悪かったのは、あまりにも多くのオブジェクトが生成されているか、低すぎて、1つの列を互いに衝突させたためです。

ここに私のアイデアの写真があります。絵で

Screen divided to 4 columns, each columns is spawn position

あなたは4列に分割したスクリーンを表示することができ、すべての列は、産卵の位置です。私はランダムにオブジェクトのスポーンを切り替える方法をゲームロジックで手助けする必要があります。

たとえば、列1の行に3つのオブジェクトを生成します。次に、列2に1オブジェクトを生成します。次に、列2に5つのオブジェクトを生成し、同時に列4に2つのオブジェクトを生成します。

私はそれをより良く説明する方法がわかりません。私は自分の英語を残念に思っています。

+0

。 – ryeMoss

+0

あなたは '// Increase fall'コードは実際にはあまり効果がありません。新しく生成されたオブジェクト*の落下速度を0.1倍に設定しているので、次にこの行が実行されたときに再度触れることはありません。 – Draco18s

答えて

1

私はあなたが他のものから独立して各列にスポーンしたいと思います。
4つのspawnerスクリプトを4つの列に追加できます。
4つのスクリプトで一意の列の位置(x)を設定します。
などあなたが4列4つのコルーチンを開始することができます:私はあなたが達成しようとしているものの絵が追加することが参考になると思います

public void StartSpawn() 
{ 
    StartCoroutine(Spawn(columnPos1)); 
    StartCoroutine(Spawn(columnPos2)); 
    StartCoroutine(Spawn(columnPos3)); 
    StartCoroutine(Spawn(columnPos4)); 
} 

IEnumerator Spawn(float columnPos) 
{ 
    yield return new WaitForSeconds(1.5f); 
    time = GameController.instance.time; 
    while (true) 
    { 
      // Random select from prefabs 
      GameObject geometryObject = spawnObjects[Random.Range(0, spawnObjects.Length)]; 
      // X is middle of random picked columns 
      float x = columnPos; 
      Vector3 spawnPosition = new Vector3(x, transform.position.y, 0.0f); 
      Quaternion spawnRotation = Quaternion.identity; 

      // Random object in row, will be spawned in one column 
      int rnd = Random.Range(1, 6); 

      // Spawn random count game object in one row 
      for (int i = 0; i < rnd; i++) 
      {     
       GameObject temp = Instantiate(geometryObject, spawnPosition, spawnRotation); 

       // Get Sprite render 
       SpriteRenderer sr = temp.GetComponent<SpriteRenderer>(); 

       // Change color of game object 
       sr.color = colors[Random.Range(0, colors.Length)]; 

       // Get script for falling down 
       FallingDown fl = temp.GetComponent<FallingDown>(); 
       // Increase fall 
       fl.fallSpeed += 0.1f; 
       // Wait between spawns 
       yield return new WaitForSeconds(Random.Range(0.35f, 1.0f)); 
      } 
      yield return new WaitForSeconds(1.0f); 
} 
+0

はい、これを前に試しましたが、私はこのコルーチンを切り替える方法を解決する必要があります。例: 右から左に生成します。ですから、最初にコルーチンをアクティブにし、ステップバイステップでアクティブにして、次の列を無効にする必要があります。 –

1

あなたのゲームが興味深いようにゲームオブジェクトを生成するアルゴリズムを求めているかもしれません。多分、このパターンが役立つでしょう(ステップを追加することができます)。

  1. 1ステップに進みます。今、ランダムに今
  2. ランダム点で4位に発生するランダムな時間帯
  3. のための2つのライン上の
  4. 右を繰り返し、左から生成
  5. を右から左に生成しますリピート
+0

このようなアルゴリズムを探していただきありがとうございます。私はそれが簡単だと思うことを知って申し訳ありませんが、私はすべての時間についてそれを考える:)と私は困難な解決策をイメージすることができます。それで私がなぜ尋ねたのか。ありがとう –

関連する問題