Interakcja z Klasami C++ w Unreal Engine

Zacznijmy nasz C ++ od analizy pliku TutoProjectGameMode.h utworzonego przez Unreal Engine dla naszego projektu. Ten plik jest nagłówkiem klasy TutoProjectGameMode.

Oto zawartość pliku:

// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "TutoProjectGameMode.generated.h"

UCLASS(minimalapi)
class ATutoProjectGameMode : public AGameModeBase
{
	GENERATED_BODY()

public:
	ATutoProjectGameMode();

};

Pierwsza linia to komentarz. Cokolwiek napisane po znakach // do końca linii jest komentarzem. Komentarz jest ignorowany podczas kompilacji programu i jest przydatny do robienia notatek o kodzie.

Możesz zdefiniować blok komentarza obejmujący wiele wierszy. Aby to zrobić, użyj znaków / *, tak aby rozpocząć komentarz. Cały następujący tekst będzie komentarzem, dopóki nie zostaną znalezione znaki * /. Poniżej przykład tego typu komentarza.

/*
    C++ Game Programming in Unreal Engine
    Author: Wlodzimierz Iwanowski
*/

Wiersze zaczynające się od znaku “#” nazywane są compilation directives (dyrektywami kompilacji). Są to instrukcje używane przez kompilator podczas procesu kompilacji. Dyrektywa #pragma once jest używana, dzięki czemu plik jest uwzględniany tylko raz podczas kompilacji.

Dyrektywa #include wstawia zawartość określonego pliku w miejscu, w którym znajduje się dyrektywa. W C ++ jest zwykle używany do dołączania plików nagłówkowych, które zawierają specyfikacje wymagane dla bieżącego pliku.

Podczas tworzenia klasy C ++ w Unreal Engine tworzony jest plik nagłówkowy z rozszerzeniem .generated.h. Ten plik musi być zawsze ostatnim plikiem, który ma być uwzględniony w dyrektywie #include.

Instrukcja UCLASS (minimalapi) jest makrem wskazującym, że ta klasa będzie zarządzana przez Unreal Engine. W czasie kompilacji makro jest zastępowane blokiem kodu.

Wiersz poniżej UCLASS () jest deklaracją klasy TutoProjectGameMode. Zauważ, że nazwa klasy jest poprzedzona literą A. Ten przedrostek jest umieszczany przez Unreal Engine i oznacza, że ta klasa jest częścią hierarchii klas klasy AActor. Ta nazwa z prefiksem A jest używana tylko w kodzie C ++. W edytorze Unreal nazwa klasy pozostaje z normalną konwencją nazewnictwa – TutoProjectGameMode.

class ATutoProjectGameMode : public AGameModeBase
{
   //class code...  
};

Tekst: public AGameModeBase po nazwie klasy wskazuje, że klasa AGameModeBase jest klasą nadrzędną klasy ATutoProjectGameMode. Jest to pojęcie znane jako dziedziczenie i oznacza, że ​​zmienne i funkcje klasy AGameModeBase są częścią klasy ATutoProjectGameMode. Można również powiedzieć, że klasa ATutoProjectGameMode jest typem AGameModeBase.

Bardzo ważny szczegół, język C ++ uwzględnia wielkość liter, dzięki czemu rozróżnia wielkie i małe litery. Jeśli używasz nazwy Atutoprojectgamemode do odwoływania się do klasy ATutoProjectGameMode, kompilator wygeneruje błąd, ponieważ są to różne nazwy.

Znaki { and } definiują blok kodu, który w tym przypadku jest używany do definiowania zawartości klasy ATutoProjectGameMode.

Pierwsza linia po {zawiera tekst GENERATED_BODY (). To jest makro Unreal Engine, które wygeneruje kod niezbędny dla silnika Unreal Engine do zarządzania tą klasą C ++.

Etykieta public wskazuje, że zmienne i funkcje zdefiniowane poniżej będą publiczne, to znaczy będą one dostępne dla innych klas C ++. Inne opcje dostępu do zmiennych i funkcji są chronione, gdzie nie są dostępne dla innych klas C ++, ale są dostępne dla klas potomnych; i prywatne, które nie są dostępne nawet dla klas podrzędnych. Te etykiety są znane jako modyfikatory dostępu.

W wierszu poniżej public: mamy tekst ATutoProjectGameMode (); co jest deklaracją klasy Constructor. Konstruktor ma blok kodu, który jest wykonywany podczas tworzenia elementu klasy. Ten blok kodu jest zdefiniowany w pliku TutoProjectGameMode.cpp.

Znak “;” jest terminatorem instrukcji w C ++. Wkrótce zapoznasz się z liniami, które należy zakończyć średnikiem.


Źródło:https://romeroblueprints.blogspot.com/2020/08/first-contact-with-unreal-c-class.html