Klasa TutoProjectCollectable oraz InputComponent
Klasa TutoProjectCharacter C ++ reprezentuje gracza i została utworzona przez szablon Third Person, który również utworzył Blueprint o nazwie ThirdPersonCharacter znajdujący się on w folderze ThirdPersonCPP / Blueprints. TutoProjectCharacter to klasa nadrzędna tego Blueprint, która jest używana do określenia Skeletal Mesha danego gracza.
Jedyną modyfikacją, jaką zrobimy w klasie TutoProjectCharacter, jest dodanie mapowania punktu wejścia, aby umożliwić graczowi ponowne uruchomienie gry poprzez naciśnięcie klawisza Enter.
W Edytorze poziomów przejdź do menu Edit->Project Settings… i wybieramy kategorię Input. Kliknij symbol + obok Action Mappings, wpisz nazwę RestartGame dla nowego Action Mapping i wybierz klawisz Enter. Input Mapping projektu będzie wyglądać następująco:

Plik TutoProjectCharacter.cpp zawiera funkcję o nazwie SetupPlayerInputComponent(), w której wejście jest powiązane z funkcjami C++, które zostaną wykonane po wyzwoleniu wejścia. Poniższy kod przedstawia kilka przykładów:
void ATutoProjectCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent)
{
// Set up gameplay key bindings
check(PlayerInputComponent);
PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);
PlayerInputComponent->BindAction("Jump", IE_Released, this, &ACharacter::StopJumping);
PlayerInputComponent->BindAxis("MoveForward", this, &ATutoProjectCharacter::MoveForward);
PlayerInputComponent->BindAxis("MoveRight", this, &ATutoProjectCharacter::MoveRight);
...
Funkcja check() służy do upewnienia się, że PlayerInputComponent jest prawidłowy. Jeśli jest nieprawidłowy, wykonywanie programu zatrzyma się i wyświetli komunikat o błędzie.
Stworzymy funkcję RestartGame(), która zostanie wywołana, gdy gracz naciśnie klawisz Enter. Pierwszym krokiem jest dodanie deklaracji funkcji w pliku TutoProjectCharacter.h. Umieść go w drugim protected: block, poniżej funkcji SetupPlayerInputComponent(), tak jak pokazano w poniższym kodzie:
...
protected:
// APawn interface
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
// End of APawn interface
void RestartGame();
...
W pliku TutoProjectCharacter.cpp połącz dane wejściowe „RestartGame” na końcu funkcji SetupPlayerInputComponent (), po wejściu „ResetVR”:
...
// VR headset functionality
PlayerInputComponent->BindAction("ResetVR", IE_Pressed, this, &ATutoProjectCharacter::OnResetVR);
PlayerInputComponent->BindAction("RestartGame", IE_Pressed, this, &ATutoProjectCharacter::RestartGame);
}
Nie zapomnij operatora & przed identyfikacją funkcji RestartGame. Służy on do zwracania adresu pamięci funkcji.
Na końcu pliku TutoProjectCharacter.cpp utwórz funkcję RestartGame() z następującą zawartością:
void ATutoProjectCharacter::RestartGame()
{
GetWorld()->GetAuthGameMode<ATutoProjectGameMode>()->StartGame();
}
Bierzemy wskaźnik do instancji trybu gry, który jest używana przez mapę i wykonuje Cast na klasę ATutoProjectGameMode. Zamiast przechowywać wskaźnik, użyjemy go do wywołania funkcji StartGame() klasy ATutoProjectGameMode.
Źródło:https://romeroblueprints.blogspot.com/2020/09/tutoprojectcharacter-class-and.html