Jump to content
Unity Insider Forum

GameObject.enabled verlangsamt die Anwendung?


Recommended Posts

Hallo zusammen,

ich schalte ein Objekt ein und aus....das mehrmals hintereinander über GameObject.enabled = true/bzw. false.

Jetzt habe ich festgestellt...es verlangsamt die Steuerung des Spielers? Gibt es noch andere Alternativen um Objekte ein und auszuschalten? Ich habe schon Versuche mit SetActive gemacht. Auch bei dieser Variante wir der Ablauf verlangsamt. Wie macht Ihr es wenn Objekt schnell aus und eingeschaltet werden sollen?

		if(Input.GetKey (KeyCode.Space))
		{
			if (this.fMuenungsfeuerZeit < Time.time && this.bFeuer == false)
			{
				//Muendungsfeuer_rechts.SetActive(true);
				//Muendungsfeuer_links.SetActive(true);
				//Muendungsfeuer_rechts.renderer.enabled = true;
				//Muendungsfeuer_links.renderer.enabled  = true;
				
				this.fMuenungsfeuerZeit = Time.time +0.02f;
				this.bFeuer = true;
			}
		}
		
		if (this.fMuenungsfeuerZeit < Time.time && this.bFeuer == true)
		{
				//Muendungsfeuer_rechts.SetActive(false);
				//Muendungsfeuer_links.SetActive(false);
				//Muendungsfeuer_rechts.renderer.enabled = false;
				//Muendungsfeuer_links.renderer.enabled  = false;
				
				this.fMuenungsfeuerZeit = Time.time +0.10f;
				this.bFeuer = false; 			
		}

 

Link to post
Share on other sites

Hallo,

vor 11 Stunden schrieb gombolo:

if (this.fMuenungsfeuerZeit < Time.time && this.bFeuer == false)

Der Knackpunkt liegt in dieser if abfrage.

Du vergleichst this.fMuenungsfeuerZeit mit Time.time, da Time.time die Zeit seit dem Spielstart zurück gibt und im Hintergrund weiter läuft hast du eine undefinierte Anzahl von aufrufen.

Diese laufen so schnell ab das du einen Stottereffekt erhältst. Du musst eine Variable erstellen in der du Time.time aufaddierst und bei erreichen der gewollten zeit wieder auf Null setzt.

z.b.

privat float MySollwert = 0f;
.......
.....
void Update()
{....
MySollwert += Time.time;
.....
.....
}



if(Input.GetKey (KeyCode.Space))
		{
			if (this.fMuenungsfeuerZeit < MYSollwert && this.bFeuer == false)
			{
				//Muendungsfeuer_rechts.SetActive(true);
				//Muendungsfeuer_links.SetActive(true);
				//Muendungsfeuer_rechts.renderer.enabled = true;
				//Muendungsfeuer_links.renderer.enabled  = true;
				
				MySollwert =0f;
				this.bFeuer = true;
			}
		}

 

Gruß Jog

Link to post
Share on other sites

Ich denke es ist nicht die Funktion SetActive(), die langsam ist, sondern es liegt eher am GameObject selbst. Wahrscheinlich gibt es da für Unity einfach "viel zu tun", um es ein/aus zu schalten.

Wenn du es mit einem anderen oder leeren GameObject machst, wird es sicher sehr schnell sein.

Hatte aber noch nie Performance Probleme beim ein und ausschalten. Ich denke das Problem liegt daran, dass da etwas nicht so elegant entwickelt hast.

 

Edit: War zu langsam 🤪

Link to post
Share on other sites
vor 2 Stunden schrieb malzbie:

@Jog Das musst du mir mal erklären.
Warum soll seine Art des Aufrufs langsamer sein, als die deine?

 

Hallo,

@malzbie Sorry, dann habe ich mich unklar ausgedrückt.

Meine Art soll nicht angeblich schneller sein , im gegen teil, ich habe bei this.fMuenungsfeuerZeit einen fix wert eingesetzt und mit

if (this.fMuenungsfeuerZeit < Time.time && this.bFeuer == false) ausprobiert und hatte ca.50 mal so viele aufrufe in der gleichen Zeit (laut Profieler) als bei meiner Variante. Was die Ausführung zum Stottern gebracht hat.Mit meiner Variante war das Stottern verschwunden.

Da ich den ganzen Code nicht kenne sollte das auch nur eine Vermutung  von mir sein.

Da ich vorher nur in  C Programmiert habe kenne ich mich in C# nicht 100% aus.

Ich habe das auch mal in C umgeschrieben und ausprobiert. Bei der Original Variante habe ich einen Stack Overflow hervorgerufen, bei meiner Variante nicht daher die Vermutung.

 

Gruß Jog

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...