Kasi2302 Geschrieben 13. Mai 2021 Melden Share Geschrieben 13. Mai 2021 Hallo, Bitte helf mir... 🙏 Ich beschäftige mich seit ungefähr einer Woche mit diesem Problem, habe viel gelesen und via Google gesucht, aber es gibt immer Compilerfehler. Bisher konnte ich alle Probleme selbst lösen, aber diesmal bekomme Ich es einfach nicht hin. Ich verwende "Unity 2020.3.1f1" für mein Projekt. Ich schreibe ein Skript, das den Ablauf in der aktuellen Szene steuern soll. Der konstante Emissionswert "rateOverTime" sollte zu einem bestimmten Zeitpunkt mit dem Skript geändert werden. Leider funktioniert es nicht, Ich kann einfach nicht auf das Emissionsmodul des Particle Systems zugreifen ... Das Skript möchte Ich jedoch nicht an das Partikelsystem angehängen, sondern es befindet sich in einem leeren Spielobjekt. Ich habe sogar das Beispiel aus der Unity-Dokumentation für das EmissionModule 2020.3 ausprobiert, das ebenfalls einen Compilerfehler erzeugt. using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { private ParticleSystem ps; public float emissionrate = 1.0f; void Start() { ps = GetComponent<ParticleSystem>(); } void Update() { var emission = ps.emission; emission.rateOverTime = emissionrate; } } Folgender Fehler kommt dann immer: NullReferenceException: Do not create your own module instances, get them from a ParticleSystem instance UnityEngine.ParticleSystem+EmissionModule.set_rateOverTime (UnityEngine.ParticleSystem+MinMaxCurve value) (at <ac4201de60e7407889b38ca75ea7dc7e>:0) SceneMainController.Update () (at Assets/Scripts/SceneMainController.cs:44) Ich habe den Namen meines Partikelsystems als "Particle System" belassen, möchte ihn aber in "vfx_fog" umbenennen. Bitte berücksichtigt dies in Euren Antworten. LG Kasi Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 13. Mai 2021 Melden Share Geschrieben 13. Mai 2021 Moin! vor 2 Stunden schrieb Kasi2302: Compilerfehler Du hast da aber eine Exception, das ist kein Kompilierfehler. Die Konsole zeigt sowohl Kompilierfehler (Code ist ungültig und kann nicht kompiliert werden) als auch Exceptions (ein Fehler ist bei der Ausführung passiert) zusammen an. Wenn du auf "clear" drückst, werden aus der Konsole alle Exceptions entfernt, aber die Kompilierfehler bleiben drin. Wenn du dann also noch einen Fehler hast, dann musst du ihn fixen, ansonsten kannst du das Spiel nochmal laufen lassen. Und der Code, den du da hast, sieht in Ordnung aus. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kasi2302 Geschrieben 13. Mai 2021 Autor Melden Share Geschrieben 13. Mai 2021 Ja, sorry, habe mich falsch ausgedrückt, der Fehler tritt bei der Ausführung auf. Schön wäre aber, wenn mir jemand helfen könnte... Bei den Neueren Unity Versionen ab Version 2020 wurde leider viel geändert, was die Syntax der Befehle betrifft. Ich habe im Internet schon viele Varianten der Befehlsstruktur gefunden um das cEmissions Modul anzusprechen, doch keine von denen hat bisher funktioniert. Weil es ja auch eine Rolle spielt ob das Script direkt ins ParticleSystem eingebunden ist oder in einem leeren gameObjekt platziert ist. Ich brauche die richtige syntax / Befehlsstruktur für ein leeres GameObject !!! Ich möchte den konstanten Emissionswert mit einer Schleife verringern, damit der Nebel langsam verschwindet. Ich habe auch schon verschiedene Tests mit einem public GameObject ausprobiert und das ParticleSystem da rein gezogen, auch das klappt leider nicht. 😪 Bitte helft mir... LG Kasi Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 13. Mai 2021 Melden Share Geschrieben 13. Mai 2021 Also wenn ich das richtig verstehe, dann hast du den kopierten Beispielcode gepostet (der auch funktioniert), aber nicht den Code, den du selber am laufen hast (SceneMainController)? Da wird's halt n bisschen schwierig mit dem Helfen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kasi2302 Geschrieben 13. Mai 2021 Autor Melden Share Geschrieben 13. Mai 2021 Ich kann das Script natürlich gerne posten, nur da steht das selbe drin, wie im Beispiel un d daher müsste es eigentlich funktionieren. Das script ist noch lange nicht fertig, jetzt ist es erstmal ein Test um das Emissions Modul anzusprechen, was leider nicht funktioniert. Der Wert "rateOverTime" steht jetzt auf 50 und soll durch das Script nach einer Verzögerung von 5 Sekunden auf 1 gesetzt werden, die Schleife baue ich ein, wenn es endlich funktioniert. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; public class SceneMainController : MonoBehaviour { float size = 0f; float readsize; public TMP_Text TextComponent; private float timer = 0; private float timerMax = 0; private ParticleSystem ps; public float emissionrate = 1.0f; // Start is called before the first frame update void Start() { Screen.sleepTimeout = (int)0f; Screen.sleepTimeout = SleepTimeout.NeverSleep; readsize = TextComponent.fontSize; TextComponent.fontSize = 0f; ps = GetComponent<ParticleSystem>(); } // Update is called once per frame void Update() { if (!Waited(5)) return; var emission = ps.emission; emission.rateOverTime = emissionrate; if (!Waited(5)) return; if (size < readsize) { size = size + 0.5f; TextComponent.fontSize = size; } else { return; } } private bool Waited(float seconds) { timerMax = seconds; timer += Time.deltaTime; if (timer >= timerMax) { return true; //max reached - waited x - seconds } return false; } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 13. Mai 2021 Melden Share Geschrieben 13. Mai 2021 Hab das Script kopiert und bei mir eingefügt; läuft ohne Probleme. Keine Fehlermeldungen und macht was es soll. Deine Fehlermeldung habe ich gekriegt, wenn ich das Script auf ein GameObject gepackt habe, das gar kein ParticleSystem hat... würde vermuten, da ist das Problem. Dein Script muss schon auf dasselbe GameObject wie das ParticleSystem. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kasi2302 Geschrieben 13. Mai 2021 Autor Melden Share Geschrieben 13. Mai 2021 Aber genau das möchte ich ja ebend nicht, hatte ich auch geschrieben, da es das zentrale script ist, welches die Scene steuert. Deshalb liegt es in einem leeren GameObjekt, hatte ich auch geschrieben. Gibt es denn eine Lösung ??? Denn selbst in einem leeren Game Object muss es ja funktionieren, nur die Syntax / Befehlsstruktur muss dann anders lauten. Selbst, wie gesagt, mit ... public ParticleSystem ps; ... geht es nicht, wenn ich das ParticleSystem in das GameObject rein ziehe... Bitte Bitte, kennt jemand die richtige Syntax / Befehlsstruktur für mein Skript im leeren GameObject ??? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 13. Mai 2021 Melden Share Geschrieben 13. Mai 2021 Jetzt komm mal bitte runter und hör mit deinem Gebettel in jedem Post auf, ich bin doch schon dabei... vor 4 Minuten schrieb Kasi2302: Gibt es denn eine Lösung ??? Ja, natürlich gibt's die. Du musst halt deine GetComponent-Zeile rauslöschen, weil sie die Referenz, die du durch das Reinziehen im Editor setzt, wieder überschreibt. Und zwar mit "null", denn es gibt ja kein ParticleSystem auf diesem GameObject. Das kannst du im Editor auch sehen, nachdem du den Play Mode startest. Da steht dann wieder "None" in dem Feld. Also einfach weg mit der Zeile und fertig. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kasi2302 Geschrieben 13. Mai 2021 Autor Melden Share Geschrieben 13. Mai 2021 Sorry, ich bettel nicht mehr. 😂 Ja stimmt genau was Du schreibst, genau so verhält sich das... Manchmal ist Unity, was das scripten angeht aber auch echt umständlich und völlig uneinheitlich ... 😒 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 13. Mai 2021 Melden Share Geschrieben 13. Mai 2021 Schon, aber nicht in diesem Fall. Man muss halt wissen, was man da tut (so Zeile für Zeile), aber das ist überall so Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kasi2302 Geschrieben 13. Mai 2021 Autor Melden Share Geschrieben 13. Mai 2021 Vielen Vielen herzlichen Dank , es funktioniert endlich !!! ☺️🥰 Du hast mir sehr geholfen, wäre ich absolut nicht drauf gekommen, es lag nur an dieser einen Zeile, nicht zu glauben !!! 😀 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kasi2302 Geschrieben 13. Mai 2021 Autor Melden Share Geschrieben 13. Mai 2021 Ich hätte da noch ein ein anderes großes Problem, aber das ist ein anderes Thema, ich melde mich deswegen nochmal in einem anderen Post 👌 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.