Problem mit der Erstellung eines Leeren Items für ein Inventar

  • Gute Tag Zusammen,


    ich bin vor kurzem zu UE4 gewechselt von Unity3d. Bisher klappt das meisete eigentlich recht gut, nur komme ich nun nimma weiter.
    Jetzt bekomme ich beim Start des Editors immer einen Acess Violation error, aber der Compiler von VS winkt alles durch.


    Ich habe 2 klassen erstellt, die erste heisst inventoryitem die von Actor erbt, in der ich Variablen habe wie z.b. ItemName und ItemValue. Im Constructor der Klasse setze ich dann Standartwerte für diese Variable.
    Die 2, klasser ist dann der Character, hier habe ich in der header Datei ein Array, ein Pointer der ein Leeres Item Darstellen soll und ein integer der die Max grösse des invs festhält:
    TArray<class AInventoryItem*> ItemInventory;
    AInventoryItem* EmptyItem;


    in der Cpp datei will ich das nun im Constructor initalisieren und das Array mit leeren items füllen:
    MaxInventorySlots = 5;
    ItemInventory.Init(EmptyItem, MaxInventorySlots);


    das geht soweit ganz gut, nur will ich dann z.b. auf den namen des items zugreifen vom Array aus kommt der Editor Error.


    hab auch schon versucht ne Instanz von dem EmptyItem zu erstellen mit EmptyItem = NewObject<AinventoryItem>(); aber dann bekomme ich schon bei der Zeile den Editor Error.



    ich hoffe einer kann mir sagen was genau ich falsch mache oder wo genau ich falsch denke.

  • Access Violation ist meist das was in Unity ne NullPointerException wäre.
    Nur das UE4-C++ dann halt Crashen tut und nicht wie bei Unity wo du nen Log Error bekommst und alles läuft fein weiter^^


    Versuch mal den Editor über Visual Studio im Debug Modus zu starten oder die laufende Engine an einen Debugger zu attachen, und dann setz einen Break Point ein paar Zeilen über die Zeile die im Crash angemerkt wird und guck wo die Acess Violation (warscheinlich NullPointer) her kommt bzw warum er da ist.

  • Servus erstmal danke für die antwort tom, den debugger hatte ich vor lauter lauter ganz verpeilt.


    ich konnte das problem jetzt soweit eingrenzen, das problem ist das er bei dem EmptyItem membern sagt das er den Speicher nicth lesen kann.


    in der header datei habe ein Pointer auf die ItemKlasse gelegt, also AInventoryItem* EmptyItem.


    danach versuch ich in der cpp datei sie zu initialisieren mit EmptyItem = NewObject<AInventoryItem>(); und da kommt dann ads mit dem Speicher.
    daher das Item eine Actorklasse ist habe ich es auch schon mit SpawnActor versucht.


    Aber EmptyItem ist immer NULL, keine ahnung was ich das übersehe

  • Ok gut das es schonmal eingegrenzt ist. Da du nen Actor als Parent Klasse hast solltest du vieleicht doch auf SpawnActor zurückgreifen ich weiß gerade nicht genau ob NewObject() mit Actors irgendwelche Probleme bringen könnte. Soll das Inventory Item wirklich ne richtige Position im 3 Dimensionalen raum haben oder warum genau hast du dich dafür entschieden?


    Ansonsten versuch mal die ConstructObject<AInventoryItem>(AInventoryItem::StaticClass()) Methode


    Aber wenn es bei SpawnActor, NewObject und ConstructObject knallen tut könnte das Problem auch im Konstruktor der Klasse liegen oder halt irgendwo im Lifecycle init prozess deiner Klasse.
    Wenn du absolut nicht weiter kommst kann ich ja mal mit auf den Code rauf gucken demnächst