Wątek przeniesiony 2017-03-24 19:46 z C/C++ przez kq.

Problem zawieszanie się gry

0

Jak usunąć te zacięcia?

skrypt generujący

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class pre : MonoBehaviour {

    public Vector3 generat;
    public GameObject gen;
    public int pool = 0;
    List<GameObject> list = new List<GameObject>();
    // Use this for initialization
    void Start()
    {
  for(int i = 0; i< pool; i++)
        {
            GameObject obje = (GameObject)Instantiate(gen);
            obje.SetActive(false);
            list.Add(obje);
        }
        InvokeRepeating("k",1.6f, 1.6f);

    }

    // Update is called once per frame
    void Update()
    {
      

    }
    public void k()
    {
       
        for(int i = 0; i < list.Count; i++)
        {
            if (!list[i].activeInHierarchy)
            {
                list[i].transform.position = new Vector3(0,gameObject.transform.position.y+25);
                list[i].transform.rotation = transform.rotation;
                list[i].SetActive(true);
                break;
            }
        }
    }
    
    

}


Oraz usuwający

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class des : MonoBehaviour {

    void OnEnable()
    {
        Invoke("Destroy", 1.7f);
    }
     
     void Destroy()
    {
        gameObject.SetActive(false);
        Destroy(gameObject,1.7f);
    }
    void OnDisable()
    {
        CancelInvoke();
    }
}

0

Podejrzewam, że skrypt generujący masz podpięty do trap, albo do innego obiektu, który dodajesz podczas gry. W konsekwencji każde dodanie nowego trap, dodaje tyle nowych obiektów na ile masz ustawioną wartość pool.

Po pewnym czasie zajeżdża to pamięć na tyle, że zaczyna ciąć. To może działać nawet jak fork tego samego procesu... w pętli. Bo ilość obiektów rośnie bardzo szybko.

Nie powinieneś łączyć puli z mechanizmem dodawania przeszkód.

  1. Powinieneś wyciągać obiekty z puli na żądanie generatora trasy.
  2. Jeśli nie ma więcej obiektów w puli, to powinieneś tworzyć nowe.

Obiekty, które znajdą się poza ekranem, powinieneś je zaparkować do puli dostępnych obiektów. I to nie po magicznym czasie 1.7 sekundy ;) (razy 2).

Jeśli w tym projekcie nie ma konieczności stosowania puli to po prostu nowe obiekty instancjonuj, a te poza ekranem niszcz. Bez tworzenia puli.

W klasie des nie powinieneś nazywać swojej metody "Destroy". Fakt, nie ma ona żadnych argumentów, więc nie będzie się gryzła z metodą w MonoBehaviour, ale mimo wszystko to zła praktyka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1