Grundlegende nachträgliche Änderungen an C++ (.cpp und .h) Files. Privat zu Public, oder Category Zuweisungen wollen nicht funktionieren...

  • Der Einstieg in C++ als Ergänzung zu Blueprint Schaltungen ist gemacht.


    (Hinweise für ebenfalls Einsteiger)
    Ein echt guter Einstiegspunkt ist wohl diese Seite: https://wiki.unrealengine.com/…ation#Things_to_look_into


    Die erste Hürde war das Installieren der kostenlosen Visual Studio Entwicklungsumgebung.
    Das Problem war dass ich alte Installationen nicht komplett deinstallieren konnte.
    Ich musste über die Windows Eingabe (CMD) den Cache löschen.


    Die zweite Hürde war dass in den Beispielen immer folgendes zu lesen ist:

    Code
    (.cpp File)
    float UCreateNewObject::AddFloats(float fA, float fB)
    {
     return fA + fB;
    }


    Wobei "UCreateNewObject" ersetzt werden muss den Namen der C++ Klasse (der Name der Dateien .cpp und .h), allerdings mit dem vorangestellten U.
    Meine Klasse heißt EigeneBlueprints. Die Dateien heißen EigeneBlueprints.cpp und EigeneBlueprints.h
    Also muss es bei mir statt "UCreateNewObject" - "UEigeneBlueprints" heißen.
    So jedenfalls funktioniert es.
    Interpretiere ich dass richtig, dass meine Klasse EigeneBlueprints heißt und durch den :: eine Funktion hinzugefügt wird?


    Eine weitere Hürde war der Hinweis, dass es einen Bug im Unreal Engine Editor gibt!
    Wurde ein Blueprint Node in C++ angelegt muss man compilieren, speichern und die unreal Engine neu starten.
    Erst nach dem Neustart findet man den Node über Rechtsklick in der Node-Liste des Blueprint Editors :(



    Wir könnten einen Thread anlegen in dem wir Anfänger unsere Erkenntnisse schreiben.
    Aber keine Fragen!
    Nur eigene "Offenbarungen". Nach dem Lesen des Threads sollte man evtl. auch auf den einen oder anderen eigenen Fehler aufmerksam werden.


    Jetzt zu meinem eigentlichen Problem:
    Meine "Blueprint Function Library" C++ Class wurde als Privat angelegt.
    Anscheinend deshalb kann ich die Blueprint Nodes nicht überall einsetzen. Zum Beispiel im Level Blueprint.
    Es wurde mir eine Warnung angezeigt dass der Node nicht Public sei.


    1) Wie kann ich nachträglich eine C++ Klasse von Private in Public ändern?
    Sie landen ja in zwei verschiedenen Ordnern.


    2) Wie kann ich nachträglich eine erstelle C++ Klasse löschen?
    Ich finde keine Möglichkeit, außer per Hand die Dateien aus dem ordner zu löschen.
    Da ich jedoch nicht weiß ob irgendwo im Projekt Hinweise auf die, dann nicht mehr existierenden Dateien, angelegt werden.


    3) Wie ändere ich nachträglich die Kategorie eines C++ Blueprint Nodes?
    Blueprint Nodes werden Kategorien zugewiesen. Ändere ich die Kategorie nachdem ich sie einmal Compiliert und eingesetzt habe wird diese Änderung nicht angenommen.
    In der Header Datei schon. Aber nicht im Blueprint Editor.

    - Unreal-Engine 4, Cinema4D R15 Studio, ZBrush, 3D-Coat, Photoshop CS6 Ext. -

  • 4) Ich habe jetzt ein Bluprint Node in C++ erstellt welches als Public angelegt wurde.
    Diesen Node habe ich an verschiedenen Stellen des unreal Editor ausprobiert.
    Einmal habe ich eine Sphere in die Welt gezogen und ein Blueprint Script hinzugefügt.
    Dort wollte ich meinen Node ausprobieren und es kam als Warnung dass mein Node Private sei und nur innerhalb seiner Klasse verwendet werden darf.
    Das gleiche im Lebel Blueprint Script.


    Wobei ich gerade sehe, dass nur der Header (.h Datei) im Public Ordner gelandet ist.
    Die .cpp ist im private Ordner gelandet.
    Bei der Erstellung der "Blueprint Function Library" C++ Class habe ich aber Public angeklickt!

    - Unreal-Engine 4, Cinema4D R15 Studio, ZBrush, 3D-Coat, Photoshop CS6 Ext. -

  • Du solltest dich mit den Grundlagen der OOP und C++ befassen, dann stellen sich all diese Fragen gar nicht.


    Zitat

    1) Wie kann ich nachträglich eine C++ Klasse von Private in Public ändern?
    Sie landen ja in zwei verschiedenen Ordnern.


    Hat mit dem Zugriff auf die Klasse überhaupt nichts zu tun, das ist nur eine Aufteilung der Dateien wie Unreal sie Vorschlägt.


    Zitat

    2) Wie kann ich nachträglich eine erstelle C++ Klasse löschen?
    Ich finde keine Möglichkeit, außer per Hand die Dateien aus dem ordner zu löschen.
    Da ich jedoch nicht weiß ob irgendwo im Projekt Hinweise auf die, dann nicht mehr existierenden Dateien, angelegt werden.


    Das wird dir schon der Compiler sagen, abgesehen davon werden deine eigenen Dateien nur dort Referenziert wo du dies auch selbst tust (#include, erben als Blueprint z.B.).


    Zitat

    3) Wie ändere ich nachträglich die Kategorie eines C++ Blueprint Nodes?
    Blueprint Nodes werden Kategorien zugewiesen. Ändere ich die Kategorie nachdem ich sie einmal Compiliert und eingesetzt habe wird diese Änderung nicht angenommen.
    In der Header Datei schon. Aber nicht im Blueprint Editor.


    Habe dieses Problem selbst noch nicht gehabt, würde da aber einfach mal nen sauberen Rebuild vorschlagen.



    Der Zugriffsspezifizierer hat nichts mit dem Ordner in dem die Datei liegt zu tun. Setze ein "public:" vor die Deklaration und der Fehler verschwindet.


    Edit:


    Zitat

    Interpretiere ich dass richtig, dass meine Klasse EigeneBlueprints heißt und durch den :: eine Funktion hinzugefügt wird?


    Zitat

    Du solltest dich mit den Grundlagen der OOP und C++ befassen, dann stellen sich all diese Fragen gar nicht.

  • Danke für die Antwort :)


    Habe mir erstmal die alten C++ Bücher aus dem Keller gekramt. :D
    Hatte schon öfter vor mich da rein zu fummeln. Ist aber an dem ganzen Zeigerkram und Fehleanfälligkeit gegenüber PHP, Python, VisualBasic, ect. gescheitert... ;(
    [Blockierte Grafik: http://unrealengine4.de/Attachment/1388-C-Buecher-jpg/?tiny=1]



    Ich habe nun Public im Header und in der Cpp Datei an verschiedenen Stellen erfolglos versucht einzusetzen.


    Im Header wird doch eigentlich schon die Klasse als Public angelegt:

    Zitat

    class BRAINWARS_API UEigeneNodes : public UBlueprintFunctionLibrary


    [Blockierte Grafik: http://unrealengine4.de/Attachment/1389-UnrealCPublicProblem-jpg/?tiny=1]


    So sieht der Fehler im Blueprint Editor aus:


    [Blockierte Grafik: http://unrealengine4.de/Attachment/1390-BPPP-jpg/?tiny=1]

  • Zitat

    Im Header wird doch eigentlich schon die Klasse als Public angelegt:


    Das ist nicht der Zugriffsspezifizierer für die Member und Methoden.


    Du hast in C++ wie auch in anderen OOP Sprachen Spezifizierer (Public, Protected, Private), welche den direkten Zugriff auf die Methoden/Member regeln.


    Hier ein Beispiel in C++:



  • Trotzdem ergibt sich folgender Fehler im BluePrint Editor.

    Zitat

    Warning Function Load File is private and cannot be called outside its class

    - Unreal-Engine 4, Cinema4D R15 Studio, ZBrush, 3D-Coat, Photoshop CS6 Ext. -

  • Nun läufts :thumbup:
    Danke!


    ich hatte das vorher auch schon mal so.
    Nur dann kam eine Fehlermeldung und ich habs wieder verworfen.


    Dabei hatte ich mir während dessen einen Fehler in der .cpp eingebaut.
    Das sind die Fallstricke die einem zu Begin schnell aufgeben lassen.


    Dadurch dass Du mir zur Seite gestanden hast musste das mit dem Public ja dann richtig sein.
    Das hätte ich sonst nicht gewusst.


    Danke Dir :!:

    - Unreal-Engine 4, Cinema4D R15 Studio, ZBrush, 3D-Coat, Photoshop CS6 Ext. -

  • Cool, immer einen Schritt weiter.


    Wollte Euch nur mal auf dem Laufenden halten :
    Inzwischen kann ich eine Textdatei (bzw.. csv) einlesen und diese in die einzelnen Zeilen zerlegen. Diese landen in einem Array.
    Gestaltet habe ich das als Blueprint Node mit dem Dateinamen (String) als Eingang und dem Array (String-Array) als Ausgang.
    Die einzelnen Zeilen enthalten alle Informationen zur Frage. Also die richtige Antwort, die möglichen Antworten, einen Counter für richtig beantwortet und einen für falsch, die Wertigkeit der Frage und eine ID.
    Nun habe ich einen Node der die Zeile (String) als Eingang hat und die einzelnen Infos alle einzeln aus Ausgänge.


    Macht richtig Spaß :)


    Gesendet von meinem GT-I9515 mit Tapatalk

    - Unreal-Engine 4, Cinema4D R15 Studio, ZBrush, 3D-Coat, Photoshop CS6 Ext. -

    Einmal editiert, zuletzt von JackMcRip ()

  • Datatables haben doch die Eigenschaft dass ich sie nur bei der Spieleentwicklung einbinden kann, oder?
    Habe ich ganz früh in meinen versuchen mal gemacht...


    Oder kann ich die Datatables auch dynamisch aus .csv Dateien einlesen?ist die Verarbeitung in Unreal dann per Sql?
    Also auch schneller?
    Wie ist die Kompatibilität zu Mobil-Devices?


    Ich möchte dass jeder die Frage/Antwort-Dateien erstellen kann und sie einfach nur in ein bestimmtes Verzeichnis legen braucht.
    So kann man selbst Fragen/Antworten erstellen und tauschen...

    - Unreal-Engine 4, Cinema4D R15 Studio, ZBrush, 3D-Coat, Photoshop CS6 Ext. -

  • Zitat

    Datatables haben doch die Eigenschaft dass ich sie nur bei der Spieleentwicklung einbinden kann, oder?


    What?


    Zitat

    Oder kann ich die Datatables auch dynamisch aus .csv Dateien einlesen?


    Ja


    Zitat

    Wie ist die Kompatibilität zu Mobil-Devices?


    Das ist ne Standard Klasse, warum sollte die nicht kompatibel sein?

  • Oh, hätte ich das besser mal früher gewusst.
    Naja, so habe ich mich in C++ für Unreal Engine rein gefunden.



    Ist ja krass...
    Ich wollte ein File-Auswahlmenü machen in dem die verschiedenen Frage-Sets (csv-Dateien) angezeigt werden.
    Der Spieler such sich ein Set aus und daraufhin werden die Fragen geladen.


    Hast Du auf die Schnelle ein link wie ich so etwas dynamisch gestalte?


    Ich hatte in meinem Versuch einfach die .csv in den Content-Browser gezogen und der Tabellen-Editor sprang auf. (oder so ähnlich)
    Daher dachte ich die Verknüpfung vom Contentbrowser wäre fix.

    - Unreal-Engine 4, Cinema4D R15 Studio, ZBrush, 3D-Coat, Photoshop CS6 Ext. -

  • In der CSV-Datei, im Texteditor kontrolliert, stehen die Umlaute wie ich sie eingegeben habe.
    Oder gibt es eine Codierung für die Datei als solches, irgendwo im Header welche ich nicht im Text Editor (Notepad) sehe?


    Hätte man eigentlich Performance-Vorteile einer DataTable gegenüber eines Arrays?
    Wenn ich das richtig verstanden habe ist es nur eine angelegte Struktur (Struct), also normale Variablen, oder?

    - Unreal-Engine 4, Cinema4D R15 Studio, ZBrush, 3D-Coat, Photoshop CS6 Ext. -

    2 Mal editiert, zuletzt von JackMcRip ()