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
Leave a Reply