Klasa TutoProjectGameMode – referencji funkcji klasy HUD

Stworzyliśmy zmienne stanu gry w klasie ATutoProjectGameMode z modyfikatorem chronionego dostępu, aby uniemożliwić innym klasom C ++ bezpośrednią modyfikację wartości tych zmiennych.

Jednak klasa ATutoProjectHUD musi mieć dostęp do niektórych z tych zmiennych, aby móc wyrenderować ich wartości na ekranie. Stwórzmy więc publiczne funkcje Get, które zwracają wartości tych zmiennych.

Zmienne, do których musi mieć dostęp klasa ATutoProjectHUD, to PlayerLevel, Score, Time i bGameOver.

Otwórz plik TutoProjectGameMode.h i dodaj deklaracje funkcji z poniższego kodu, które są po void ItemCollected().

...

public:
	ATutoProjectGameMode();

	void StartGame();

	void ItemCollected();

	int32 GetPlayerLevel();

	int32 GetScore();

	int32 GetTime();

	bool  IsGameOver();

Typ int32 przed nazwą funkcji wskazuje, że funkcja zwraca wartość całkowitą. W przypadku zmiennych logicznych (prawda / fałsz), konwencja funkcji Get polega na użyciu Is plus nazwa zmiennej, jak w IsGameOver ().

Funkcje Get są bardzo proste, po prostu zwracają wartości zmiennych. Otwórz plik TutoProjectGameMode.cpp i dodaj definicje funkcji na końcu pliku, jak pokazano w kodzie poniżej.

int32 ATutoProjectGameMode::GetPlayerLevel()
{
	return PlayerLevel;
}

int32 ATutoProjectGameMode::GetScore()
{
	return Score;
}

int32 ATutoProjectGameMode::GetTime()
{
	return Time;
}

bool ATutoProjectGameMode::IsGameOver()
{
	return bGameOver;
}

Jeśli chcesz, aby inne klasy modyfikowały wartość chronionej lub prywatnej zmiennej, możesz utworzyć publiczną funkcję Set. Nie będziemy potrzebować funkcji Set w klasie ATutoProjectGameMode, ale poniżej znajduje się przykład funkcji Set, która modyfikuje zmienną Score.

void ATutoProjectGameMode::SetScore(int32 NewScore)
{
	Score = NewScore;
}

Jedną z zalet używania funkcji Set jest to, że można sprawdzić poprawność nowej wartości przed zapisaniem jej w zmiennej.

Inną zmianą, którą należy wprowadzić w klasie ATutoProjectGameMode, jest zdefiniowanie, że klasa ATutoProjectHUD będzie używana jako HUD gry. Odbywa się to w pliku TutoProjectGameMode.cpp w konstruktorze ATutoProjectGameMode ().

Konieczne jest dodanie #include „TutoProjectHUD.h”, aby klasa ATutoProjectGameMode znalazła definicję klasy ATutoProjectHUD. Przypisanie nowej klasy HUD odbywa się za pomocą tej linii:

HUDClass = ATutoProjectHUD::StaticClass();

Funkcja StaticClass() jest funkcją Static, która zwraca odwołanie do klasy. Funkcje statyczne należą do klasy, to znaczy nie potrzebują instancji do wykonania.

Początek pliku TutoProjectGameMode.cpp wygląda następująco:

#include "TutoProjectGameMode.h"
#include "TutoProjectCharacter.h"
#include "UObject/ConstructorHelpers.h"
#include "TutoProjectHUD.h"

ATutoProjectGameMode::ATutoProjectGameMode()
{
  // set default pawn class to our Blueprinted character
  static ConstructorHelpers::FClassFinder<APawn> PlayerPawnBPClass(
         TEXT("/Game/ThirdPersonCPP/Blueprints/ThirdPersonCharacter"));
	
  if (PlayerPawnBPClass.Class != NULL)
  {
    DefaultPawnClass = PlayerPawnBPClass.Class;
  }

  HUDClass = ATutoProjectHUD::StaticClass();
}

...

Przypisanie DefaultPawnClass różni się od przypisania HUDClass, ponieważ jest używany Blueprint o nazwie ThirdPersonCharacter, który został utworzony przez szablon Third Person. Klasą nadrzędną tego Blueprinta jest TutoProjectCharacter.

Gdyby te przypisania klas w trybie gry były wykonywane w Blueprints, wyglądało by to tak w zakładce klas naszego Game Mode:


Źródło:https://romeroblueprints.blogspot.com/2020/08/tutoprojectgamemode-class-get-functions.html