Не выгружать объекты из памяти после удаления.

Раздел, посвящённый самому важному - скорости.

Не выгружать объекты из памяти после удаления.

Сообщение yura415 31 авг 2012, 01:50

Как не выгружать объекты после удаления? Каждый раз, когда объект создаётся на сцене, вся игра немного подтормаживает (долю секунды), потом всё нормально.
Добавить yura4151 в Skype
Аватара пользователя
yura415
Старожил
 
Сообщения: 567
Зарегистрирован: 14 дек 2010, 08:27
  • Сайт

Re: Не выгружать объекты из памяти после удаления.

Сообщение gnoblin 31 авг 2012, 01:56

ну рывок виден если текстура первый раз появилась на экране - при создании второй копии объекта рывок тоже есть?

можно создавать пул объектов и реюзать их вместо создания/удаления - в сети и ассет сторе есть решения на эту тему для юнити
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Не выгружать объекты из памяти после удаления.

Сообщение yura415 31 авг 2012, 01:58

gnoblin писал(а):ну рывок виден если текстура первый раз появилась на экране - при создании второй копии объекта рывок тоже есть?

можно создавать пул объектов и реюзать их вместо создания/удаления - в сети и ассет сторе есть решения на эту тему для юнити

Да, лагает при каждом повторном создании.
Добавить yura4151 в Skype
Аватара пользователя
yura415
Старожил
 
Сообщения: 567
Зарегистрирован: 14 дек 2010, 08:27
  • Сайт

Re: Не выгружать объекты из памяти после удаления.

Сообщение Syberex 31 авг 2012, 10:49

Может тогда объекты просто деактивировать?
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Не выгружать объекты из памяти после удаления.

Сообщение yura415 31 авг 2012, 11:01

Syberex писал(а):Может тогда объекты просто деактивировать?

Хм, дело в том, что это игра как большой конвейер, игрок бежит и на него летят препятствия.
Так это происходит:
Синтаксис:
Используется csharp
        public void GenerateBiomes()
        {
                int lastFrom=0,lastTo=5000,step=5000;
                for(int o=0; o<10; o++){
                        stages.Add(new Stage());
                        stages[o].scoreFrom=lastFrom;
                        stages[o].scoreTo=lastFrom+step;
                        lastTo=lastFrom+step;
                        lastFrom=lastTo;
                        for(int i=0; i<stages[o].scoreTo/1000; i++){
                                stages[o].biomes.Add(new Biome());
                                float rr = Random.value;
                                int iii=(stages[o].scoreFrom<step*2)?((stages[o].scoreFrom<step)?1:(rr>0&&rr<.6f)?2:1):((rr>0&&rr<.2f)?1:(rr>.2&&rr<.6f)?2:3);
                                if(iii<3){
                                        List<BiomeEnity.Position> pos = new List<BiomeEnity.Position>();
                                        for(int f=0; f<iii; f++)
                                        {
                                                BiomeEnity enity = new BiomeEnity();
                                                enity.objT=(player.score<step*2)?BiomeEnity.GObjT.small:(Random.value>.9f)?BiomeEnity.GObjT.big:BiomeEnity.GObjT.small;
                                                float r=Random.value;
                                                enity.position=(r>0&&r<.3f)?BiomeEnity.Position.Left:(r>.3f&&r<.6f)?BiomeEnity.Position.Center:(r>.6f&&r<1)?BiomeEnity.Position.Right:BiomeEnity.Position.Left;
                                                if(!pos.Contains(enity.position)){
                                                        pos.Add(enity.position);
                                                } else {
                                                        r=Random.value;
                                                        enity.position=(r>0&&r<.3f)?BiomeEnity.Position.Left:(r>.3f&&r<.6f)?BiomeEnity.Position.Center:(r>.6f&&r<1)?BiomeEnity.Position.Right:BiomeEnity.Position.Left;
                                                        pos.Add(enity.position);
                                                }
                                                enity.zOffset=Random.Range(-.15f,.2f);
                                                stages[o].biomes[i].enities.Add(enity);
                                                //Debug.Log(f);
                                        }
                                } else {
                                                BiomeEnity enity1 = new BiomeEnity();
                                                enity1.objT=(player.score<step*2)?BiomeEnity.GObjT.small:(Random.value>.9f)?BiomeEnity.GObjT.big:BiomeEnity.GObjT.small;
                                                enity1.position=BiomeEnity.Position.Left;
                                                enity1.zOffset=Random.Range(-.15f,.2f);
                                       
                                                BiomeEnity enity2 = new BiomeEnity();
                                                enity2.objT=(player.score<step*2)?BiomeEnity.GObjT.small:(Random.value>.9f)?BiomeEnity.GObjT.big:BiomeEnity.GObjT.small;
                                                enity2.position=BiomeEnity.Position.Right;
                                                enity2.zOffset=Random.Range(-.15f,.2f);
                                       
                                                BiomeEnity enity3 = new BiomeEnity();
                                                enity3.objT=(player.score<step*2)?BiomeEnity.GObjT.small:(Random.value>.9f)?BiomeEnity.GObjT.big:BiomeEnity.GObjT.small;
                                                enity3.position=BiomeEnity.Position.Center;
                                                enity3.zOffset=(Random.value<.5f)?-20:20;
                                       
                                                stages[o].biomes[i].enities.Add(enity1);
                                                stages[o].biomes[i].enities.Add(enity2);
                                                stages[o].biomes[i].enities.Add(enity3);
                                }
                                //Debug.Log(i);
                        }
                }
                CheckPositions();
        }


Синтаксис:
Используется csharp
                if(nextObstacleGT<Time.timeSinceLevelLoad){
                        if(createObjects){
                                Biome biom = activeStage.biomes[Random.Range(0,activeStage.biomes.Count)];
                                foreach(BiomeEnity enity in biom.enities){
                                        float xPos=0;
                                        switch(enity.position){
                                                case BiomeEnity.Position.Left:
                                                        xPos=minMaxGenerationX.x;
                                                        break;
                                                case BiomeEnity.Position.Center:
                                                        xPos=0;
                                                        break;
                                                case BiomeEnity.Position.Right:
                                                        xPos=minMaxGenerationX.y;
                                                        break;
                                        }
                                        GameObject toInst=prefabs.getRandomObstacle(enity.objT);
                                        GameObject go = Instantiate(toInst,new Vector3(xPos,1.1f,zGeneration-enity.zOffset)+toInst.GetComponent<TranslatingObject>().translateOffset,Quaternion.Euler(new Vector3(toInst.transform.rotation.eulerAngles.x,toInst.transform.rotation.eulerAngles.y+((enity.position==BiomeEnity.Position.Left)?-80:(enity.position==BiomeEnity.Position.Right)?-80:0),toInst.transform.rotation.eulerAngles.z))) as GameObject;
                                        go.transform.parent=this.transform;
                                        if(!go.GetComponent<TranslatingObject>()){
                                                go.AddComponent<TranslatingObject>();
                                        }
                                }
                        }
                        nextObstacleGT=Time.timeSinceLevelLoad+obstacleGenerationDelay;
                }
Добавить yura4151 в Skype
Аватара пользователя
yura415
Старожил
 
Сообщения: 567
Зарегистрирован: 14 дек 2010, 08:27
  • Сайт


Вернуться в Оптимизация

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3