Read XML Datei zur Laufzeit

  • Ich möchte XML Datei in UE4 einlesen . Ich habe es versucht mit rein C++ ( also ohne UE4) und es hat geklappt. Aber wie kann ich das Code in UE4 verwenden bzw umschreiben. Wie kann ich auch "Output of Code" als Array speichern

    Kann jemand bitte weiterhelfen.


    das Code:

  • Bei uns geht alles gerade drunter und drüber, deshalb hat das so lange gedauert und ich kann nur das Prinzip zeigen:

    C: XMLHandler.h
    [...]
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    TArray<FVector> PointArray;
    
    UFUNCTION(BlueprintCallable)
    void ParseXML();
    [...]


  • Du kannst dir natürlich auch ein Struct machen mit entweder drei Vectoren als Parameter oder einfach 9 integers / floats als properties. Dann kannst du das auch so in Blueprints verwenden


  • Du kannst dir natürlich auch ein Struct machen mit entweder drei Vectoren als Parameter oder einfach 9 integers / floats als properties. Dann kannst du das auch so in Blueprints verwenden


    Kannst du bitte mir das Beispiel schicken. Ich habe (Copy-Paste) gemacht aber es hat leider nicht funktioniert.

  • Bei uns geht alles gerade drunter und drüber, deshalb hat das so lange gedauert und ich kann nur das Prinzip zeigen:

    C: XMLHandler.h
    [...]
    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    TArray<FVector> PointArray;
    
    UFUNCTION(BlueprintCallable)
    void ParseXML();
    [...]


    Was soll hier gemacht werden, um das Fehler zu beheben?

  • Kannst du bitte mir das Beispiel schicken. Ich habe (Copy-Paste) gemacht aber es hat leider nicht funktioniert.

    Wenn du beides kopiert haben solltest:
    Du musst dich für eine Variante entscheiden oder einfach ein struct umbenennen.

    Also z.B. FXmlPointVector und FXmlPointInt


    Aber du bräuchtest eigentlich nur eine der beiden Varianten.



    1. [...]
    2. UPROPERTY(EditAnywhere, BlueprintReadWrite)
    3. TArray<FVector> PointArray;
    4. UFUNCTION(BlueprintCallable)
    5. void ParseXML();
    6. [...]

    ich meine in zeie 1 und 7 was soll ich einpacken.

    Bei mir sieht header file nun so:


    Wenn du beides kopiert haben solltest:
    Du musst dich für eine Variante entscheiden oder einfach ein struct umbenennen.

    Also z.B. FXmlPointVector und FXmlPointInt


    Aber du bräuchtest eigentlich nur eine der beiden Varianten.

  • Du kannst dir natürlich auch ein Struct machen mit entweder drei Vectoren als Parameter oder einfach 9 integers / floats als properties. Dann kannst du das auch so in Blueprints verwenden


    noch bitte eine Frage, soll ich das in mein Header file einpacken? oder nur diese Zeilen

    UPROPERTY(EditAnywhere, BlueprintReadWrite)

    TArray<FVector> PointArray;

    UFUNCTION(BlueprintCallable)

    void ParseXML();


    Danke für deine Hilfe. ich bin Beginner in C++ und das ist meinen ersten Versuch.

  • Jetzt wo ich so drüber nachdenke: Kann es sein, dass X/Y/Z, rX/rY/rZ und sX/sY/sZ für Location, Rotation und Scale stehen? Ich frage wegen des 'r' und des 's' wegen.
    Dann würdest du die eigenen structs nämlich gar nicht brauchen und könntest das TArray<FVector> zu einem TArray<FTransform> machen!

  • Jetzt wo ich so drüber nachdenke: Kann es sein, dass X/Y/Z, rX/rY/rZ und sX/sY/sZ für Location, Rotation und Scale stehen? Ich frage wegen des 'r' und des 's' wegen.
    Dann würdest du die eigenen structs nämlich gar nicht brauchen und könntest das TArray<FVector> zu einem TArray<FTransform> machen!

    richtig die für Location, Rotation und Scale.

  • Wenn du das TArray<FVector> in ein TArray<FTransform> umwandelst, kannst du einfach "Break Transform" aufrufen. Das Break XmlPoint war von meinem USTRUCT, aber da wusste ich ja noch nicht, dass die XML Location, Rotation und Scale enthält, also gleich eines Transforms ist.


    Das "Target" kommt daher, dass das void ParseXml() nicht static ist. Du kannst das aber so umschreiben:


    C: .h
    static void ParseXml(TArray<FTransform>& PointArray);

    dann sollte es gehen!


    Das UPROPERTY(...) TArray<FVector> ... kannst du dann löschen


    (musst das TArray<FTransform>& PointArray natürlich auch in der .cpp ergänzen)

  • Es bleibt noch einen Fehler. Kannst du es bitte korrigieren. Ich bedanke mich im Voraus.