2016-11-17 49 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函數中通過實例化impassableObjects使用。一切都可以在產卵部分工作,但是我的「雄貓」有時會在不可見物體上產卵。我試過幾種方法來整合RandomPosition()方法,但還沒有真正成功。

如果您需要了解更多信息,像我的變量,讓我知道!我還不確定需要多少錢,因爲我還是個初學者。

每一條建議將不勝感激。

喬爾·克羅斯比。

+0

如果我的答案有幫助,請不要忘記標記爲已接受,如果沒有,請告訴我,我會詳述 –

+0

我沒有也不會忘記。只是想讓它正常工作,以便我可以同時發佈我的解決方案。你的文章給了我足夠的觀點,可以自己解決,所以我非常感謝你。 –

回答

1

最好的辦法就是維護一個List<Vector3> ImpassibleObjects並在實例化一個新的tomcat之前檢查它。大概也包括一點空間。

東西線沿線的:

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

應該工作,祝你好運!

+0

花了一天的時間試圖讓它變得正確,但我似乎無法得到它。我試圖使一個列表 objectPositions,然後做objectPositions.Add(randomPosition)正上方gridPosition.RemoveAt()在RandomPosition()方法,但我不明白如何衡量objectPositions對抗enemySpawn。無論我做什麼,最終都不會產生任何東西。 我是磨砂膏,我知道。 –

+0

爲了得到兩個'Vector3's之間的距離,你只需要從另一箇中減去一個的絕對值。你的「閾值」應該由你來確定,並且應該比包含你的不可見物體的圓的半徑大一點。然後檢查你的新產卵位置是不是在你的列表中的任何項目的閾值內的一個簡單的事情。如果你附上你的新代碼,它可能會幫助我解決出了什麼問題。 –