Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#平台的无限繁殖-会造成滞后吗?_C#_Unity3d_Indefinite - Fatal编程技术网

C#平台的无限繁殖-会造成滞后吗?

C#平台的无限繁殖-会造成滞后吗?,c#,unity3d,indefinite,C#,Unity3d,Indefinite,好吧,我在C#中使用Unity,我创建了一些简单的函数,根据玩家的z位置无限期地生成一系列平台(游戏对象)。一旦游戏对象安全地离开视线,我就会删除它们,并在玩家每次向前移动时调用此更新方法: void spawnSectorGroup() { int i = numSectorsToSpawn; //get position of last sectors, when its exceeded by player then delete and spawn again

好吧,我在C#中使用Unity,我创建了一些简单的函数,根据玩家的z位置无限期地生成一系列平台(游戏对象)。一旦游戏对象安全地离开视线,我就会删除它们,并在玩家每次向前移动时调用此更新方法:

void spawnSectorGroup()
    {
        int i = numSectorsToSpawn; //get position of last sectors, when its exceeded by player then delete and spawn again
        while (i >= 0) {
            int j = Random.Range (0, sectors.Length);
            spawnSector (gamePosition.position, sectors [j]);
            i--;
        }
    }
    void checkAndUpdateSectors() 
    {
        //print ("Player pos"+playerPosition.position);
        //print ("last sector"+gamePosition.position);

        if (gamePosition.position.z - playerPosition.position.z <= 20) { //safe value ahead
            print ("theyre almost there, spawn new group");
            print (gamePosition.position.z - playerPosition.position.z);
            spawnSectorGroup ();

        }

        //destroy past ones
        GameObject[] objects = FindObjectsOfType(typeof(GameObject)) as GameObject[];
        //GameObject[] objects = GameObject.FindGameObjectsWithTag("Block");
        foreach (GameObject o in objects) {

            if (o.gameObject.tag == "Block" || o.gameObject.tag == "Cage" || o.gameObject.tag == "Animal" || o.gameObject.tag == "Enemy") {

                if (playerPosition.position.z - o.transform.position.z >= 100) { //safe aways back

                    print ("destroying past object");
                    print (o.transform.position);
                    Destroy (o.gameObject);
                }
            }

        }

    }
void spawnSector(Vector3 relativePosition,GameObject sector){
        GameObject newSector = GameObject.Instantiate (sector, relativePosition, transform.rotation) as GameObject;
        gamePosition.position += newSector.GetComponent<Sector> ().length;
    }
void spawnSectorGroup()
{
int i=numSectorsToSpawn;//获取最后一个扇区的位置,当玩家超过该位置时,再次删除并生成
而(i>=0){
int j=随机范围(0,扇区长度);
产卵区(gamePosition.position,扇区[j]);
我--;
}
}
void checkAndUpdateSectors()
{
//打印(“玩家位置”+玩家位置);
//打印(“最后一个扇区”+gamePosition.position);
如果(gamePosition.position.z-playerPosition.position.z=100){//安全返回
打印(“销毁过去的对象”);
打印(o.变换位置);
销毁(o.游戏对象);
}
}
}
}
空产卵区(矢量3相对位置,游戏对象区){
GameObject newSector=GameObject.实例化(扇区、相对位置、变换、旋转)为GameObject;
gamePosition.position+=newSector.GetComponent().length;
}
这一切都是可行的,但我担心,从长远来看,如果玩家每次在最后一个衍生扇区的20个左右的单位内衍生出大约10个新的“扇区”,那么将会从大量的游戏对象中产生延迟


我没有无限期产卵的经验-这会是一个问题吗?或者这是无限繁殖的好做法吗?

创建和销毁对象的成本很高,而且在游戏运行时,您希望避免大量创建和销毁对象


查看上的Unity教程。其基本思想是,不创建和销毁对象,而是从现有对象池中获取对象,并在创建和销毁后返回它们,以便它们可以重用。

谢谢-创建/销毁后,延迟会很明显吗?多少是一个大数量?这完全取决于对象的复杂性和数量。让它开始,玩它,然后决定它是否需要优化!