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