コード例 #1
0
        InfiniteTerrainChunk GetFreePrefabInstance(InfiniteTerrainChunk aPrefab)
        {
            List <InfiniteTerrainChunk> instances;

            // ensure the pool has a list available for this prefab
            if (!_terrainPool.TryGetValue(aPrefab, out instances))
            {
                instances = new List <InfiniteTerrainChunk>();
                _terrainPool.Add(aPrefab, instances);
            }

            // now make sure there's an available instance in the list
            for (int i = 0; i < instances.Count; i++)
            {
                if (!instances[i].gameObject.activeSelf)
                {
                    return(instances[i]);
                }
            }

            // no instance was found, go ahead and create one
            GameObject           obj   = Instantiate(aPrefab.gameObject);
            InfiniteTerrainChunk chunk = obj.GetComponent <InfiniteTerrainChunk>();

            obj.SetActive(false);
            instances.Add(chunk);
            return(chunk);
        }
コード例 #2
0
        void AddNewChunk(Vector3 aTo, Side aSide)
        {
            InfiniteTerrainChunk prefab   = GetRandomPrefab();
            InfiniteTerrainChunk instance = GetFreePrefabInstance(prefab);

            instance.ConnectTo(aTo, aSide);
            instance.gameObject.SetActive(true);
            _activeInstances.Add(instance);
        }