Jump to content
Unity Insider Forum

ExecuteInEditMode


grinseengel

Recommended Posts

Hallo,

ich habe mal wieder etwas für mich Neues mit dem ich nicht wirklich etwas anfangen kann. Habe das jetzt zum ersten Mal gehabt.

Nachdem ich ein Script für ein sich bewegendes Sprite in mein Projekt eingebracht habe, brachte der Unity Editor ein Hinweisfester in dem ich auf einen ExecuteInEditMode hingewiesen Wurde. Tatsächlich wurde die Bewegung meines Sprites nur im Vorschaufester von Unity während der Laufzeit angezeigt. Als ich das Projekt gebuildet habe, konnte ich die Animation nicht sehen. Meine Frage und Hilfeersuchen in diesem Zusammenhang wäre a) eine Erklärung warum das so ist und b) wie ich das in den Playmode überführen kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

So völlig ohne Code oder einen Hinweis darauf, was du benutzt, ist es immer schwierig, irgendetwas zu sagen. Was für eine Animation? Nur die Bewegung? Oder redest du von einem Animator? Ist das dein Code mit dem [ExecuteInEditMode]-Attribut oder von jemand anderem?

Link zu diesem Kommentar
Auf anderen Seiten teilen

OK, verstehe ich. Ich habe mal einen Codeschnipsel als Beispiel bei.

public void CreateComponents(){
		if(isCanvas && cr==null){
			#if UNITY_EDITOR
				DestroyImmediate(GetComponent<MeshFilter>());
				DestroyImmediate(GetComponent<MeshRenderer>());
			#else
				Destroy(GetComponent<MeshFilter>());
				Destroy(GetComponent<MeshRenderer>());
			#endif

Hat das evtl. etwas mit #if Unity_Editor zu tun. Diese Befehle sind mir gänzlich unbekannt. Sorry das ich so dumm frage. Ich habe das Script in einem Prefab verwendet, also nicht direkt im Projektordner.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es handelt sich hierbei um Preprozessor-Direktiven. Damit sagst du dem Compiler, dass er auf eine bestimmte Art mit deinem Code umgehen soll, während er kompiliert wird.

#if schmeißt den folgenden Code (bis zum #else oder #endif) einfach komplett raus, wenn die nachfolgende Bedingung nicht zutrifft. Die UNITY_BLUB-Flags werden von Unity je nach Plattform gesetzt. So landen in deinem Beispiel die ersten beiden Zeilen (DestroyImmediate) im kompilierten Code, solange du im Editor bist - sobald du aber einen Build machst, also den Editor verlässt, landen die unteren beiden Zeilen im Ergebnis.

Der Verdacht, dass Code wie dieser Schuld daran sein kann, dass im Build etwas anders ist als im Editor, ist also nicht schlecht. Allerdings sieht dieser Code ziemlich narrensicher aus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nein, ich denke nicht, dass dieser Code-Ausschnitt etwas damit zu tun hat. Der sieht wie gesagt gut aus.

Wenn man im Edit Mode, also im Editor ist, während der Play Mode aus ist, dann muss man Dinge mit DestroyImmediate zerstören statt mit Destroy. Und genau diese Unterscheidung passiert hier.

Ich sehe in diesem Code auch nichts, was mit Animation oder Bewegung zu tun hätte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...