Problem mit Klassen und Funktionen

  • Hallo Leute,
    Ich habe vor mit der UE / C++ Programmierung anzufangen und bin schon bei Klassen und Funktionsaufrufen gescheitert.
    Ich habe ein C++ Tutorialreihe angefangen, und bisher mit Code Blocks keine Probleme gehabt.
    Jedoch wenn ich nun versuche das gelernte bei UE anzuwenden, komm ich nicht mehr weiter.


    Die Idee dahinter ist folgendes:


    Ich habe ein FirstPerson - Projekt angefangen und mit einem tutorial herausgefunden, wie man mit Raycasts arbeitet.. soweit so gut.
    Nun habe ich ein Actor 'EnemyActor', der eine Funktion "ApplyDamage" beinhaltet.
    Diese Funktion, soll von der Character Klasse aufgerufen werden, wobei das übrig gebliebene Leben angezeigt wird.
    Mit meiner Lösung zeigt mir das Programm keine Fehler an, aber sobald ich das Raycast aktiviere stürzt UE ab und wird von neu gestartet.



    MyRayCastProjectCharacter.cpp


    EnemyActor.cpp

    Code
    void AEnemyActor::ApplyDamage()
    {
        health -= 10;
        GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("Applied Damage.. %d Health left"), health));
    }


    //Edit: die Variable health ist private. Die Funktion ApplyDamage ist public.


    Die Funktion PerformRaycast wird über 'InputComponent' aufgerufen und funktionert auch. Es stürzt aber ab, sobald ich versuche 'ApplyDamage' aufzurufen.
    Ich hoffe ihr könnt mir da weiterhelfen.



    Offtopic:
    1. Es stört mich ein wenig, dass gefühlt 90% der Tutorials und ähnliches über UE, auf Blueprints basieren. Ich programmiere sehr gerne, und will daher nur ungern drauf verzichten. Kennt ihr ne Seite/ Seiten, was mir weiterhelfen könnte?
    2. Ich hab nicht mehr den neusten PC, und vom Starten des Epic Games Launchers bis zum bearbeiten des ersten Codes, wenn ich ein neues C++ Projekt starte, vergehen zum Teil 20-30 Minuten. Ist das normal?


    LG AnGaraa :)

  • EActor ist nicht instanziiert also NULL. Deswegen ist da Schluss.


    Auch wenn das Spiel abstürzt. Es schreibt Logs. Da kannst du mal nach deiner Klasse suchen und gucken was der will.


    Zu 2. Nein, es ist nicht normal. Klingt nach einem alten Laptop der tausend Programme im Autostart hat.

  • Hi,


    du musst den Actor aus deinem HitResult nehmen:

    Code
    HitResult->Actor->ApplyDamage();


    Das AEnemyActor EActor; kannst du dann löschen.
    Und bei jedem Absturz erzeugt UE4 ein Crash-Log und zeigt diesen an. Dafür musst du aber die Debug-Symbols mit installiert haben. Das geht über den kleinen gelben Pfeil bei der Engine Version und dann Options->Install Debug-Symbols (sind so 8-9gb)


    Zu 1: Ja, das meiste ist in BP. Aber oft kann man davon die C++ Funktion ableiten. Hilfreich sind die C++ Beispiele aus dem Learning Tab, wie das Shooter Example. Man muss sich da etwas reinfuchsen und ein Flow-Chart aufzeichnen hilft auch ungemein, aber da sind sehr viele Funktionen drin.


    Edit: Eine gute Hilfe ist natürlich auch die Doku: https://docs.unrealengine.com/latest/INT/API/index.html oder einfach google nach z.B. "ue4 LineTraceSingleByChannel" und dann nach "https://docs.unrealengine.com..." links ausschau halten