Jump to content
Unity Insider Forum
StolleJay

Low FPS nach Aktivierung eines simplen Scripts [Gelöst]

Recommended Posts

Hallo,

bisher habe ich keinerlei Probleme in Sachen Performance etc. gehabt.

Heute wo ich ein neues, relativ kleines Script fertig habe und dies auch funktioniert ist mir aufgefallen das nachdem ich dieses Script in der Szene Aktiviere ich von 60FPS auf unter 30FPS falle.
Ich habe schon die Objekte die hier erstellt werden auf "Static" gestellt (damit diese auch in die Kategorie Occlusion Culling fallen) aber es wird nicht besser.

using System.Collections.Generic;
using UnityEngine;

public class randomObjectGeneration : MonoBehaviour {

    List<Transform> objList = new List<Transform>();

    Transform obj;
    public Transform[] go;
    public int objNumber = 0;
    public float objSizeMin = 1;
    public float objSizeMax = 1;

    private int objID = 0;
    private float objSize;
    private int sizeX;
    private int sizeZ;

    // Use this for initialization
    void Start()
    {
        sizeX = FindObjectOfType<settings>().sizeX;
        sizeZ = FindObjectOfType<settings>().sizeZ;
        
        for (var i = 0; i < objNumber; i++)
        {
            var index = Random.Range(0, go.Length);
            var pos = new Vector2(Random.value * sizeX, Random.value * sizeZ);
            objSize = Random.Range(objSizeMin, objSizeMax);
            Vector3 setpos = new Vector3(pos.x, 0, pos.y);
            Vector3 setrot = new Vector3(0, Random.Range(0, 360), 0);
            Vector3 setsize = new Vector3(objSize, objSize, objSize);

            objID++;
            obj = Instantiate(go[index], setpos, Quaternion.Euler(setrot));
            obj.localScale = setsize;
            obj.name = go[index].name + "_[" + objID + "]";
            obj.parent = transform;
            objList.Add(obj);
        }
    }
}

Ist da evtl. am Script etwas falsch oder habe ich etwas Übersehen? Das ist das erste mal das ich beim Start mehrere Objekte in untersch. Größe, Rotation etc. pp. Instantiieren lasse.

Ich hoffe ihr könnt mir da weiterhelfen :)

Share this post


Link to post
Share on other sites

Das Problem dürfte weniger an diesem Script liegen, als an den Objekte die du erstellt. Start() wird nur ein einiges mal aufgerufen und hat keine Auswirkung auf die FPS.

Share this post


Link to post
Share on other sites

Profiler anschmeißen und anschauen warum dein FPS runter geht.

Share this post


Link to post
Share on other sites

Das habe ich ich vergessen zu erwähnen. Auf einer Fläche (Unity Maße) von 8x8 werden 80 Objekte gespawnt. Das größte bzw. Komplexeste Objekt hat nur 102 tris von diesem gibt es dann ca. nur um die 20. die anderen 3 Objekte haben weit unter 100 tris. Also wirklich Low-Poly.

Auch wenn ich nur 40 Objekte spawnen lasse bekomme ich nicht wirklich mehr FPS.

Edit:
Kann es an diesem "destroyable.Update" liegen? Alles in diesem Update rufe ich auf bzw. führe ich aus wenn eine variable auf "true" steht welche normal also bei Spielstart auf "false" gesetzt ist. Das ist auch der Fall das habe ich schon geprüft. Also sollte er das Update ja gar nicht aufrufen bzw. den Inhalt ausführen.

Unbenannt-2.thumb.jpg.9d1f7ab0be449e07f5aa2ad0e503c411.jpg

Share this post


Link to post
Share on other sites
vor 59 Minuten schrieb StolleJay:

Kann es an diesem "destroyable.Update" liegen?

Ganz offenbar! Du machst irgendwo FindObjectsOfType in Update, und das ist eine superschlechte Idee.

Share this post


Link to post
Share on other sites

Tatsache...
Hab das destroyable Script nun umgebaut und siehe da... 60FPS ohne Probleme :)

Danke für eure Hilfe :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×