首页 > 解决方案 > 如何在unity3d中阻止瓷砖在一定数量后产生

问题描述

我有一个生成无尽瓷砖(3D)的脚本,我希望它在某个数字(例如 100)之后停止,并且在最后一个瓷砖(第 100 个)结束时,我想生成另一个预制件,如门户。我不知道该怎么做。我在谷歌上找到的任何答案都无济于事。任何帮助深表感谢。

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);
    } 
}

标签: unity3dspawn

解决方案


你可以做一些事情,比如传入一个布尔值来告诉函数生成一个门户。

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
    }
}

推荐阅读