как остановить появление плиток после определенного числа в unity3d - PullRequest
0 голосов
/ 14 октября 2018

У меня есть скрипт, который порождает бесконечные тайлы (3D), и я хочу, чтобы он останавливался после определенного числа (например, 100) и в конце последнего тайла (сотый), я хочу создать другой префаб, какпортал.Я понятия не имею, как это сделать.Любой ответ, который я нашел на Google, не мог помочь.Любая помощь очень ценится.

void Start()
{

    nextTileLocation = startPoint;
    nextTileRotation = Quaternion.identity;
    for (int i = 0; i < initSpawnNum; ++i) 
    {
        SpawnNextTile (i >= initNoObstacles);
    }


}


public void SpawnNextTile(bool spawnObstacles = true)
{
    var newTile = Instantiate (tile, nextTileLocation, nextTileRotation);

    var nextTile = newTile.Find ("Next Spawn Point");

    nextTileLocation = nextTile.position;
    nextTileRotation = nextTile.rotation;

    if (!spawnObstacles)
        return;

    var obstacleSpawnPoints = new List<GameObject> ();

    foreach (Transform child in newTile) {

        if (child.CompareTag ("ObstacleSpawn")) {

            obstacleSpawnPoints.Add (child.gameObject);
        }
    }

    if (obstacleSpawnPoints.Count > 0) {

        var spawnPoint = obstacleSpawnPoints [Random.Range (0, obstacleSpawnPoints.Count)];

        var spawnPos = spawnPoint.transform.position;

        var newObstacle = Instantiate (obstacle, spawnPos, Quaternion.identity);

        newObstacle.SetParent (spawnPoint.transform);
    } 
}

1 Ответ

0 голосов
/ 15 октября 2018

Вы можете сделать что-то вроде pass in bool, чтобы сообщить функции порождать портал.

void Start()
{
    nextTileLocation = startPoint;
    nextTileRotation = Quaternion.identity;

    for (int i = 0; i < initSpawnNum; ++i) 
    {
        // Pass in true for the last tile
        SpawnNextTile (i >= initNoObstacles, i == initSpawnNum - 1);
    }
}

public void SpawnNextTile(bool spawnObstacles = true, bool shouldSpawnPortal = false)
{
   //
}

Изменить, чтобы показать добавление плиток в список:

class YourScript : MonoBehaviour
{
    private List<GameObject> tiles = new List<GameObject>();

    private void SpawnNextTile(bool spawnObstacles = true, bool shouldSpawnPortal = false)
    {
        var newTile = Instantiate (tile, nextTileLocation, nextTileRotation);
        tiles.Add(newTile);

        // The rest of your code
    }
}
...