2016-11-17 3 views
2

これはしばらくの間グーグルで行ってきましたが、何を探したらいいのか分からないので、みなさんにいい人に助けを求めるつもりです。ユニティ:手順的に生成されたマップ上に敵を生み出す

私は最初の試合の手続きレベルのクリエイターに取り組んでいます。コードの一部はここのチュートリアルに触発されていますが、自分でできる限り多くのことをしようとしています。とにかく、ここで私は、すべての地獄のように、おそらく醜いしている、との助けが必要なコードです、と私は私が後を助ける必要なものを説明します:

だから、
Vector3 RandomPosition() 
{ 
    int randomIndex = Random.Range (0, gridPositions.Count); 

    Vector3 randomPosition = gridPositions [randomIndex]; 

    gridPositions.RemoveAt (randomIndex); 

    return randomPosition; 
} 


void LayoutObjectAtRandom (GameObject[] tileArray, int minimum, int maximum) 
{ 
    int objectCount = Random.Range (minimum, maximum); 

    for (int i = 0; i < objectCount; i++) 
    { 
     Vector3 randomPosition = RandomPosition(); 

     GameObject tileChoice = tileArray [Random.Range (0, tileArray.Length)]; 

     Instantiate (tileChoice, randomPosition, Quaternion.identity); 
    } 
} 

void spawnTomcats() // Figure out a way to use the RandomPosition to exclude used tiles in enemySpawn 
{ 
    int enemyCount = (int)Mathf.Log (level, 2f); 

    for (int i = 0; i < enemyCount; i++) 
    { 
     Vector3 enemySpawn = new Vector3 (columns + (Random.Range (0, 5)), rows - (Random.Range (7, 14)), 0f); 

     GameObject tileChoice = enemyTiles [Random.Range (0, enemyTiles.Length)]; 

     Instantiate (tileChoice, enemySpawn, Quaternion.identity); 
    } 

public void SceneSetup (int level) 
{ 
    BoardSetup(); 
    InitialiseList(); 
    spawnTomcats(); 

    LayoutObjectAtRandom (impassableObjects, impassableCount.minimum, impassableCount.maximum); 

    Instantiate (heatCat, new Vector3 (columns - 8, rows - (Random.Range(7, 14)), 0f), Quaternion.identity); 
} 
} 

、私は必要なものを選択する「のVector3 enemySpawn」のためであります指定されたパラメータ内のタイルですが、SceneSetup関数のimpassableObjectのインスタンス化ではまだ使用されていません。すべてが産卵部分で機能しますが、私の "Tomcats"は時には攻撃できないオブジェクトの上に産まれます。私はいくつかの方法でRandomPosition()メソッドを統合しようとしましたが、実際には成功しませんでした。

私の変数のような情報が必要な場合は、教えてください!私はまだ初心者なので、どれくらい必要なのかは分かりません。

すべてのアドバイスをいただければ幸いです。

ジョエルクロスビー。

+0

もし私の答えが助けになるなら、それを受け入れられたものとしてマークすることを忘れないでください。私に知らせてください、そして私は精巧にします –

+0

私はしなかったし、忘れないでしょう。ちょうどそれが正常に動作するように、私は同時に私のソリューションを投稿することができます。あなたの投稿は、私自身でそれを解決するための十分な視点を与えてくれたので、私はそれに感謝します。 –

答えて

1

おそらく、List<Vector3> ImpassibleObjectsを維持して、それを確認してから新しいTomcatをインスタンス化することをお勧めします。おそらく周りに少しのスペースも含んでいるでしょう。線に沿って

何か:

foreach (Vector3 impLoc in ImpassibleObjects) 
{ 
    if (randomPosition - impLoc < threshold) 
    { 
      CalculateNewRandomPositionAndRecheck(); 
    } 
} 

は、幸運を動作するはずです!

+0

一日を過ごすのに苦労しましたが、実際にはそれを得ることはできません。私はList のobjectPositionsを作ってみた後、RandomPosition()メソッドでgridPosition.RemoveAt()の直上にobjectPositions.Add(randomPosition)を実行しましたが、enemySpawnに対してobjectPositionsを測定する方法はありません。私が何をしても、何も産んでいないのです。 私はスクラブです、私は知っています。 –

+0

2つの 'Vector3's間の距離を取得するには、単に一方の絶対値をもう一方の値から引きます。あなたの「スレッショルド」はあなたによって決定され、あなたの不可解なオブジェクトを含むサークルの半径より少し大きいはずです。新しい産卵場所があなたのリストのどの項目の閾値にも入っていないことを確認するのは簡単なことです。新しいコードを付け加えると、何がうまくいかないのかを理解するのに役立ちます。 –

関連する問題