Jump to content
Unity Insider Forum

Zeile wird nur einmal Ausgeführt.


LonlonFarm1

Recommended Posts

Moin,

 

Ich hab das Gefühl etwas einfaches zu übersehen, da mein Problem für mich einfach keinen Sinn ergibt.

 

also, ich hab eine Zeile Code in der lateupdate Funktion, sie steht in einer if Abfrage, komischerweise wird sie nur einmal aufgerufen, ich dachte vielleicht wird die Abfrage nur einmal auf True geschaltet. Allerdings hab ich eine Message mit debug. Log gemacht und sie direkt über die Zeile gesetzt und die Nachricht wurde in der ersten Sekunde 999+ mal ausgegeben.

meine Zeile ist: lantern.GetComponentInChildren<Light2D>().Intensity += lichtsteigerung;

 

ich hoffe jemand kann mir helfen

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also die Laterne hat ein intensity level von 2, die Steigerung ist auf 0,5 eingestellt und am Ende ist der intensity level 2,5.

ich kann es mir wirklich nicht erklären, es ist auch eine foreach Schleife die das für jede Laterne ausführt, es ist halt nur so komisch dass die log Nachricht sich 1000 mal ausführt und die Zeile direkt darunter nur einmal

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 12 Minuten schrieb LonlonFarm1:

es ist halt nur so komisch dass die log Nachricht sich 1000 mal ausführt und die Zeile direkt darunter nur einmal

Ist halt garantiert nicht der Fall. Wenn eine Anweisung über der anderen ist und die obere wird ausgeführt, dann kann nur eine Exception verhindern, dass die untere ausgeführt wird. Und die würdest du in der Konsole sehen.

Zeig doch einfach mal deinen Code.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das mache ich beides morgen, da ich jetzt nicht mehr an den pc kann, allerdings sollte ich wohl noch erwähnen dass meine Zeile mal funktioniert hat, ich dann die intensity in einer Animation als property verwendet hab und es danach logischerweise nicht mehr funktionierte, ich hab dann eine neue Animation ohne die property gemacht und den Code in die lateupdate Methode getan damit es auch aktualisiert wird. Falls diese Info weiter hilft 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hä? Es hatte funktioniert dann hast du was gemacht und dann nicht mehr funktioniert und dann hast du nochmal alles umgebaut ohne erstmal den Fehler zu finden???

Stell doch einfach erstmal alles wieder so, das es funktioniert und geh dann immer ein schritt weiter bis es nicht mehr geht, dann weißt du was das Problem ist.

Wäre das gleiche als würde sich der Player mit w nicht mehr vorwärts bewegen, dann baut man das komplette Spiel weiter auf den Fehler auf... Dann irgendwann hat man den Fehler gefunden und merkt das zum beheben des Fehlers das ganze Spiel geändert werden muss.

Ohje Ohje

Ach und übrigens 999+ ist kein Maximum beim aufrufen. Ist doch nur die Anzahl der Meldungen die über 999 ist und im Log steht es doch auch genauer.

Und die Anzahl hat auch keine Bedeutung. Es ist wichtig ob der Log regelmäßig zählt oder z.b. nach 300 aufrufen 10min. Pause macht etc.

Aber wie gesagt, um aufgerufene Bedingungen zu Testen sind Debug.Log´s eine sehr gute Methode das zu testen.

Mich irritiert auch deine Gleichung  +=

Wie wird deine lichtsteigerung Variable errechnet usw. setz doch einfach mal 8 rein und schau ob dein licht auf 8 geht, dann würde die Variable schuld sein.

Diese kannst du auch im Debug.Log checken usw....

Wie der gute @sascha schon sagte, zeig Code her

Link zu diesem Kommentar
Auf anderen Seiten teilen

public void WaitAndLight()
    {
        

        foreach (GameObject lantern in lanterns)
        {
            
            if (lantern.transform.GetChild(0).gameObject.activeSelf == true)
            {
                Debug.Log("lol");
                lantern.GetComponentInChildren<Light2D>().intensity += lichtSteigerung;
            }

            
        }
    }


private void LateUpdate()
    {
        if (LanternActiveCount() == 10)
        {
            foreach(GameObject lantern in lanterns)
            {
                lantern.GetComponent<Animator>().Play("LanternLightUp");
            }
            WaitAndLight();
            StartCoroutine(nameof(CancelRepeat));
            LightUp();
            LightAndSummon();
            Spawnswitch(false);
            ChangeBackground(withouteyes);

            enemyDeathCount = 0;
        }

        if (Input.GetKeyDown(KeyCode.P))
        {
            
            
            Spawnswitch(false);
        }
    }

Also ich scheine mich da falsch ausgedrückt zu haben, ich hab nicht weitergemacht ohne den Fehler zu beheben. Ich bin ja gerade an der Stelle an der ich den Fehler wieder beheben möchte. Wie gesagt es hat alles funktioniert, dann hab ich, um ein Flackern zu erzeugen in die On Animation der Fackel die Property für ein paar der Parameter der Fackel gepackt. Das hat die Parameter festgesetzt so dass der Code der auch auf die Parameter zugreift selbstverständlich nicht mehr funktionierte. Und ohne mein Spiel dann an anderen Stellen weiterzumachen habe ich mich direkt dem Problem angenommen, ich las in einem Forum dass man die Parameter dann nur noch im LateUpdate aufrufen kann kann, also erstellte ich eine weitere Brand Animation mit den gleichen Frames nur halt ohne die Propertys.

Mit der += Gleichung hat ja vorher auch alles funktioniert, sollte ich mich nicht irren ist das ja die Abkürzung für: Lantern.Intensity = Lantern.Intensity + Lichtsteigerung. 

Eigentlich hätte es dann Funktionieren müssen, aber wie gesagt wird die Lichtsteigerungs Zeile nur einmal ausgeführt, der ganze Code läuft gewollter weise nur eine Sekunde lang und die sowohl über der If abfrage und direkt über der Zeile wird eine Debug.Log("lol") Zeile 640 mal ausgeführt. 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dann musst du wohl oder übel 1 nach dem anderen prüfen.

In mein einfachen Test

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

public class NewBehaviourScript : MonoBehaviour
{
    float lichtSteigerung = 0.1f;

    public GameObject lantern;

    // Update is called once per frame
    void LateUpdate()
    {
        lantern.GetComponent<Light>().intensity += lichtSteigerung;

        Debug.Log(lichtSteigerung);
    }
}

Funktioniert es wunderbar.

If Abfrage rausnehmen und schaun ob dein Licht geht. Wenn ja die einzelnen If Bedingungen prüfen bzw. dein foreach etc.

Es muss einer der Abragen sein, die auf 640 Begrenzen. Sehe gerade das das Funktionsaufruf WaitAndLight auch in einer Abfrage steckt.

Kann auch an dieser Abrage Hapern. Wie gesagt alle Abfragen nach und nach rausnehmen bis es geht und dann siehste erstmal welche Abrage daran Schuld ist etc.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für deine Hilfe, ich hab es vor ein paar Minuten allerdings selbst gelöst.

mir kam der Einfall dass die einzig mögliche Variante ist dass immer wieder die grundintensität genommen wird und immer wieder die einzelne Steigerung drauf addiert wurde. Also hab ich eine Variable für die grundintensität gemacht die außerhalb der Abfrage gemacht wurde, hab sie in der start Funktion auf 2 gesetzt und dann die Zeile dann ungeschrieben: lantern.getcomponentinchild<Light2D>().intensity += defaultintensity

darunter hab ich dann: defaultintensity += lichtsteigerung geschrieben und es hat funktioniert.

 

es scheint also einfach ein Verhalten zu geben dass wenn man in Animation propertys macht, diese in den anderen Animationen in jeder update Methode auf den startwert zurück setzt.

 

danke für euren Aufwand, ich find es echt super wie in diesem Forum immer so schnell und engagiert geholfen wird.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...