Bestimmten Player zerstören

  • Moin,


    möchte gerne meinen aktuellen Spielcharakter löschen bei OnComponentBeginOverlap und dann zu einem der übrigen Charaktere InGame wechseln (Possess). Nutze ich aber DestroyActor und Get PlayerCharacter oder Pawn, löscht er mir immer direkt alle Charaktere die sich im Level befinden.
    Hat da jemand ne Idee, wie ich das umsetzen könnte? Er muss halt beim Overlap wissen, welchen Char ich gerade steuer und dann nur diesen einzelnen löschen..

  • Danke, aber das funktioniert nicht. Ausser ich mache beim CastTo etwas falsch. Er sagt mir, ich bräuchte kein CastTo mehr und könnte OtherActor direkt mit DestroyActor verbinden. Dann löscht er aber auch wieder alle Player im Spiel. Habe jetzt CastToActor und CastToObject ausgewählt... Wenn ich eine ObjectReference erstelle als Bsp. zu Player1 und diesen mit OtherActor vergleiche, wenn ich mit Player1 Overlap auslöse kommt ein "False". Gebe ich beides aber als Namen im PrintString aus. Steht zweimal Player1 da..

  • Ein PlayerController kann per default nur einen Actor/Pawn besitzen (possess).
    Wenn du diesen Actor/Pawn löschst, dann sollte auch nur dieser Actor/Pawn gelöscht werden.


    Dein Fall hört sich danach an, als hättest du mehrere Spielcharaktere als Components in einen Pawn-Blueprint gepackt. Wenn du diesen Actor dann zerstörst, werden natürlich auch alle Components zerstört.


    Wenn ich eine ObjectReference erstelle als Bsp. zu Player1 und diesen mit OtherActor vergleiche, wenn ich mit Player1 Overlap auslöse kommt ein "False". Gebe ich beides aber als Namen im PrintString aus. Steht zweimal Player1 da..

    Ein Objekt ist eben etwas anderes als ein Actor, daher können sie beim Vergleich nicht gleich sein. Sie haben eventuell den gleichen Namen, aber sind nicht vergleichbar, da ein Actor noch andere Funtkionen als ein Objekt besitzt. Ein Actor ist eine Unterklasse eines Objects. Du solltest noch ein paar Grundlegende Tutorials durcharbeiten, glaube ich. ;) Auch was das Cast-To angeht.


    Man könnte den Aufbau so machen:


    1. Du hast eine Character/Pawn klasse. Einfach 1 Character.


    2. Du hast z.B. ein TodesVolume klasse (einfach mit einem box collision component).


    3. Im TodesVolume machst du ein "OnBeginOverlap", machst mit dem "Other Actor" einen CastTo Character/Pawn Klasse. Die Referenz von diesem Character/Pawn ziehst du aus der Cast To Node und machst dann ein "DestroyActor" um den Character/Pawn zu zerstören. (bei "DestroyActor" auf jedenfall als Target die Pawn Referenz benutzen, sonst wird das Todesvolume(self) zerstört.
    4. Dann Rufst du noch ein/e Event/Funktion (z.B. im Playercontroller) auf, die dir ermöglicht einen neuen Character/Pawn auszuwählen.

  • Genau so hatte ich es gemacht. Ein BP nur mit BoxCollision als Level-Ziel mit "OnBeginOverlap". Meine Spielcharaktere sind direkte Duplicate von Player01, der wiederum auf dem TopDownTemplate-Char basiert.
    Wozu Cast-To dient ist mir durchaus bewusst. Ich war lediglich verwirrt, warum immer alle gelöscht wurden, anstatt nur eines einzelnen, obwohl ich OtherActor als Target zum DestroyActor gewählt hatte.
    Habe es aber nun lösen können.


    OnComponentBeginOverlap -> Other Actor -> GetClass -> GetAllActorsOfClass -> Get(Copy) -> DestroyActor.


    Danach löse ich ein Event aus, welches überprüft, welche Spieler noch im Feld sind und nimmt (possess) der Reihenfolge entsprechend, den direkt Nächsten. Da ich max. nur 4 Charaktere habe, ist es nicht viel, die er da überprüfen muss.
    Danke für eure Hilfe! :)


    EDIT: Ok, irgendwie scheint es dabei immer noch Probleme zu geben... Melde mich später dazu nochmal
    EDIT2: Ok, funktioniert doch, brauch aber ein kurzes Delay 0,1 zwischen dem neuen "Possess" da es sonst zu Problemen kommt (Neuer Char wird zur Location des alten Chars gezogen)