Du setzt einen Spawn Actor from Class-Node, drückst Play und... nichts. Kein Actor, kein Fehler, keine Log-Zeile. Oder er spawnt, ignoriert aber die Werte, die du einen Node später gesetzt hast. Spawnen sieht aus wie das Einfachste in Unreal — ein Node rein, ein Actor raus. Worum es in diesem Post geht: warum er sich still danebenbenimmt.

Spawn Actor, die Ein-Node-Variante

Der Node heißt Spawn Actor from Class. Gib ihm eine Class und einen Transform, er gibt dir den neuen Actor zurück. Für das meiste — ein Pickup, einen Gegner, ein Projektil — ist das wirklich alles. Der Ärger fängt bei den Randfällen an, und er zeigt sich fast immer als "nichts passiert, und es gibt keinen Fehler zum Verfolgen".

Warum dein Actor still nicht spawnt

Schau auf den Collision Handling Override-Pin. Sein Default löst sich für die meisten Klassen zu Do Not Spawn if Overlapping auf. Wenn dein Spawn-Punkt also irgendwas überlappt — den Boden, einen anderen Actor, die Capsule des Players — wird der Spawn abgebrochen und gibt None zurück. Kein Fehler. Kein Log. Hier verlieren Anfänger einen Nachmittag.

Deine Optionen:

  • Always Spawn, Ignore Collisions — spawnen, egal was. Der häufigste Fix.
  • Try To Adjust Location, But Always Spawn — an eine freie Stelle rücken, aber trotzdem spawnen.
  • Adjust Location, Don't Spawn If Still Colliding — rücken, aufgeben wenn kein Platz ist.
  • Do Not Spawn — der strenge Default, der dich beißt.

Wähl bewusst. Für eine Münze, die auf den Boden fällt, ist "Always Spawn, Ignore Collisions" fast immer das, was du gemeint hast.

Variablen richtig setzen: Deferred Spawn

Hier der klassische Bug. Du Spawnst Actor, dann Set MyVar auf dem Ergebnis. Aber das BeginPlay des Actors lief schon — mit dem Default-Wert, nicht dem, den du gerade gesetzt hast. Alles, was BeginPlay mit der Variable getan hat, ist jetzt falsch, und es sieht so aus, als hätte die Variable "nicht gegriffen".

Zwei saubere Fixes:

  • Expose on Spawn — hak Expose on Spawn (und Instance Editable) an der Variable an. Sie taucht als Input-Pin direkt am Spawn-Actor-Node auf. Setz sie dort, und sie steht vor BeginPlay.
  • Spawn Actor Deferred — für Setup, das zu komplex für Pins ist. Spawn Actor Deferred erstellt den Actor, pausiert aber vor BeginPlay. Setz, was du brauchst, dann ruf Finish Spawning. BeginPlay läuft danach, mit deinen Werten bereits angewandt.

Die Regel: wenn BeginPlay sie liest, muss sie vor BeginPlay gesetzt sein. Pins oder Deferred — nie ein simples Set danach.

Vergiss den Transform nicht

Spawn braucht einen Transform. Lass ihn auf Default und jeder Actor stapelt sich am World-Origin (0,0,0) — ein Haufen Gegner in der Ecke der Map. Bau den Transform: Make Transform mit der gewünschten Location, oder hol den GetActorTransform eines Spawn-Punkts. Relativ zu einem anderen Actor spawnen? Nimm dessen Transform als Basis.

Prüf immer das Ergebnis

Spawn kann None zurückgeben — Collision Override, eine abstrakte Klasse, eine ungültige Class-Reference. Wenn der nächste Node dieses Ergebnis blind nutzt, kriegst du Accessed None (den häufigsten Blueprint-Fehler). Branch direkt nach dem Spawn auf Is Valid, bevor du den Actor anfasst.

Owner und Instigator zählen mehr, als du denkst

Zwei optionale Pins, die fast jeder ignoriert. Owner ist, wem der Actor gehört — wichtig für Replication und manche Cleanups. Instigator ist der verantwortliche Pawn — wichtig für die Schadenszuweisung. Spawn ein Projektil ohne Instigator und Kill-Credit, Friendly-Fire-Checks und Assist-Tracking brechen alle still. Zwei Pins jetzt, oder ein rätselhafter Bug später.


Plugin tip
Spawnen ist Schritt eins — danach konfigurierst du meist den Actor: Sichtbarkeit umschalten, eine Component anhängen, den Startzustand setzen. Das ist ein Haufen kleiner Nodes, die du jedes Mal neu baust. FoxActor bündelt die Actor-Utility-Seite — State, Components, Combat-Helfer, Visibility-Queries — in fertige Nodes. Optional, aber es kürzt das Post-Spawn-Boilerplate.

Typische Fehler

  • Collision Override auf Default gelassen. Die Nummer-eins-Ursache für "es hat nicht gespawnt und es gibt keinen Fehler". Setz ihn absichtlich.
  • Variablen nach dem Spawn setzen. Zu spät für BeginPlay. Nutz Expose on Spawn oder Spawn Actor Deferred.
  • Default-Transform. Alles stapelt sich am World-Origin. Bau den Transform.
  • Kein Null-Check. Spawn kann fehlschlagen; Is Valid bevor du das Ergebnis nutzt.
  • Im Tick spawnen. Ein verirrter Spawn pro Frame sind tausende Actors in Sekunden. Gate ihn hinter einem Event oder einer Bedingung.
  • Instigator bei Projektilen vergessen. Schaden und Kill-Credit brechen ohne Fehler.

Wie du einen fehlgeschlagenen Spawn debuggst

  • Ergebnis ist None? Es ist fast immer der Collision Override. Schalt auf "Always Spawn, Ignore Collisions" und schau, ob der Actor erscheint — wenn ja, war's das.
  • Spawnt, läuft aber auf Default-Werten? BeginPlay lief vor deinem Set. Verschieb die Variable auf Expose on Spawn oder geh Deferred.
  • Ein Print String im BeginPlay des gespawnten Actors, der die Variable zeigt, sagt dir sofort, ob dein Wert rechtzeitig ankam.

Die 30-Sekunden-Zusammenfassung

  • Spawn Actor from Class braucht eine Class und einen echten Transform.
  • Collision Handling Override auf Default = stilles None, wenn die Stelle belegt ist. Setz ihn bewusst.
  • Variablen, von denen BeginPlay abhängt → Expose on Spawn oder Spawn Actor Deferred + Finish Spawning.
  • Null-Check das Ergebnis mit Is Valid.
  • Setz Owner / Instigator für Projektile und alles, was Schaden macht.

Nächsten Sonntag, wenn die Votes halten: JSON & CSV in Blueprints lesen — die nativen Nodes, von denen du nicht wusstest, dass es sie gibt, ihre Grenzen, und wie du externe Daten zur Laufzeit ins Spiel bekommst.

— Marco