Amélioration de l'entrée de la nouvelle fonctionnalité illusoire 5

Athrun Aslan 2022-05-14 11:02:48 阅读数:421

liorationentrlanouvellefonctionnalit

Résumé

C'est une illusion.5Nouveau plug - in de fonctionnalitésEnhanced InputApprentissage de l'utilisation et interprétation du cadre de code,Le système sera analysé à la fois du point de vue de l'application et du niveau inférieur..

Enhanced InputC'est une illusion.InputExtension du système,L'idée et l'origine du traitement de l'entréeInputLes idées du système sur le processus sont cohérentes.La différence est que,Certains concepts de base sont extraits et abstraits,Par exemple:ActionEtAction Context.Plus que ça,Sous le nouveau cadre,Plus de fonctionnalités disponibles,Comme le contact et la pression continue vers le bas, etc..

Utilisation rapide

Travaux préparatoires

Enhanced InputEst fourni sous forme de plug - in intégré,InPluginsPanel,Vérifier et redémarrer le moteur pour activer:

Insérer la description de l'image ici

InContentBrowserClic droit,Vous pouvez voir qu'il est apparuInputNouvelles entrées pertinentes,SurtoutInputActionActifs etInputMapContextActifs, Description le plug - in a été activé avec succès .

Insérer la description de l'image ici

Ensuite, vous devez aller à la configuration du projet Input Dans la colonne , Modifier les paramètres de la classe par défaut :

Insérer la description de l'image ici

Par la suite, Au niveau du Code, il est nécessaire de Build.cs Ajouter le module de dépendance approprié au fichier :

public class InsideEnhancedInput : ModuleRules
{
public InsideEnhancedInput(ReadOnlyTargetRules Target) : base(Target)
{
...
PrivateDependencyModuleNames.AddRange(new string[] {"EnhancedInput"});
}
}

Voilà.,Peu importe.Editor Toujours dans le Code du projet ,Nous sommes tous libres d'utiliserEnhanced InputC'est tout..

Modifier l'entrée du modèle de troisième personne

Introduction à la configuration d'entrée du modèle original de troisième personne

L'entrée du modèle de troisième personne est principalement définie par Input->Bindings L'interface lie la chaîne d'entrée à la clé , Encore dans le Code / Le plan directeur pour l'action (Utiliser une chaîne) Lier les événements de rappel appropriés .

Insérer la description de l'image ici

Code de liaison d'entrée correspondant :

//
// Input
void AInsideEnhancedInputCharacter::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("Move Forward / Backward", this, &AInsideEnhancedInputCharacter::MoveForward);
PlayerInputComponent->BindAxis("Move Right / Left", this, &AInsideEnhancedInputCharacter::MoveRight);
// We have 2 versions of the rotation bindings to handle different kinds of devices differently
// "turn" handles devices that provide an absolute delta, such as a mouse.
// "turnrate" is for devices that we choose to treat as a rate of change, such as an analog joystick
PlayerInputComponent->BindAxis("Turn Right / Left Mouse", this, &APawn::AddControllerYawInput);
PlayerInputComponent->BindAxis("Turn Right / Left Gamepad", this, &AInsideEnhancedInputCharacter::TurnAtRate);
PlayerInputComponent->BindAxis("Look Up / Down Mouse", this, &APawn::AddControllerPitchInput);
PlayerInputComponent->BindAxis("Look Up / Down Gamepad", this, &AInsideEnhancedInputCharacter::LookUpAtRate);
// handle touch devices
PlayerInputComponent->BindTouch(IE_Pressed, this, &AInsideEnhancedInputCharacter::TouchStarted);
PlayerInputComponent->BindTouch(IE_Released, this, &AInsideEnhancedInputCharacter::TouchStopped);
}

UtiliserEnhancedInputAjuster le modèle de troisième personne

Créer d'abord les actifs liés à l'entrée ,Y compris:5- Oui.InputAction:

  • IA_MoveForward(float)
  • IA_MoveRight(float)
  • IA_Jump(bool)
  • IA_Turn(float)
  • IA_LookUp(float)

IA_MoveForward Exemple de répartition des actifs d'action :

Insérer la description de l'image ici

Recréer1- Oui.InputMappingContext, Ajouter un certain nombre de nouveaux actifs d'action créés précédemment ( N'oubliez pas d'inverser l'une des touches correspondant à l'axe NegateFonctionnement, Sinon, les deux touches correspondront au même comportement ,Par exemple:MoveForward- Oui.S Clé inversée ), Et ajouter la liaison clé correspondante :

Insérer la description de l'image ici

Tous les actifs de ContentBrowser Affichage sous la vue :

Insérer la description de l'image ici

Niveau de code,EntréeCharacterCatégorie( Personnalisation héritée de CharacterCatégorie), Réécrivez une partie de ce code :

UCLASS(config=Game)
class AInsideEnhancedInputCharacter : public ACharacter
{
...
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category="EnhancedInput")
UInputMappingContext* InputMappingContext;
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category="EnhancedInput|Action")
UInputAction* IA_MoveForward;
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category="EnhancedInput|Action")
UInputAction* IA_MoveRight;
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category="EnhancedInput|Action")
UInputAction* IA_Turn;
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category="EnhancedInput|Action")
UInputAction* IA_LookUp;
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category="EnhancedInput|Action")
UInputAction* IA_Jump;
protected:
/** Called for forwards/backward input */
void MoveForward(const FInputActionValue& Value);
/** Called for side to side input */
void MoveRight(const FInputActionValue& Value);
/**
* Called via input to turn at a given rate.
* @param Rate This is a normalized rate, i.e. 1.0 means 100% of desired turn rate
*/
void TurnAtRate(const FInputActionValue& Value);
/**
* Called via input to turn look up/down at a given rate.
* @param Rate This is a normalized rate, i.e. 1.0 means 100% of desired turn rate
*/
void LookUpAtRate(const FInputActionValue& Value);
...
...
void AInsideEnhancedInputCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
// Conserver l'originalInput Réponse d'entrée du système
Super::SetupPlayerInputComponent(PlayerInputComponent);
if(APlayerController* PC = CastChecked<APlayerController>(GetController()))
{
if(UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PC->GetLocalPlayer()))
{
Subsystem->AddMappingContext(InputMappingContext, 100);
}
}
if(UEnhancedInputComponent* EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(PlayerInputComponent))
{
if(IA_MoveForward)
{
EnhancedInputComponent->BindAction(IA_MoveForward, ETriggerEvent::Triggered, this, &AInsideEnhancedInputCharacter::MoveForward);
}
if(IA_MoveRight)
{
EnhancedInputComponent->BindAction(IA_MoveRight, ETriggerEvent::Triggered, this, &AInsideEnhancedInputCharacter::MoveRight);
}
if(IA_Turn)
{
EnhancedInputComponent->BindAction(IA_Turn, ETriggerEvent::Triggered, this, &AInsideEnhancedInputCharacter::TurnAtRate);
}
if(IA_LookUp)
{
EnhancedInputComponent->BindAction(IA_LookUp, ETriggerEvent::Triggered, this, &AInsideEnhancedInputCharacter::LookUpAtRate);
}
if(IA_Jump)
{
EnhancedInputComponent->BindAction(IA_Jump, ETriggerEvent::Started, this, &AInsideEnhancedInputCharacter::Jump);
EnhancedInputComponent->BindAction(IA_Jump, ETriggerEvent::Completed, this, &AInsideEnhancedInputCharacter::StopJumping);
}
}
}
...
void AInsideEnhancedInputCharacter::TurnAtRate(const FInputActionValue& Value)
{
// calculate delta for this frame from the rate information
AddControllerYawInput(Value.GetMagnitude() * TurnRateGamepad * GetWorld()->GetDeltaSeconds());
}
void AInsideEnhancedInputCharacter::LookUpAtRate(const FInputActionValue& Value)
{
// calculate delta for this frame from the rate information
AddControllerPitchInput(Value.GetMagnitude() * TurnRateGamepad * GetWorld()->GetDeltaSeconds());
}
void AInsideEnhancedInputCharacter::MoveForward(const FInputActionValue& Value)
{
if ((Controller != nullptr) && (Value.IsNonZero()))
{
// find out which way is forward
const FRotator Rotation = Controller->GetControlRotation();
const FRotator YawRotation(0, Rotation.Yaw, 0);
// get forward vector
const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
AddMovementInput(Direction, Value.GetMagnitude());
}
}
void AInsideEnhancedInputCharacter::MoveRight(const FInputActionValue& Value)
{
if ( (Controller != nullptr) && (Value.IsNonZero()) )
{
// find out which way is right
const FRotator Rotation = Controller->GetControlRotation();
const FRotator YawRotation(0, Rotation.Yaw, 0);
// get right vector
const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);
// add movement in that direction
AddMovementInput(Direction, Value.GetMagnitude());
}
}

Voilà.,Après compilation,En conséquenceCharacter Interface Blueprint , Peut être lié :

Insérer la description de l'image ici

Vidéo de l'effet final :

Par ici., Nous utilisons essentiellement EnhancedInput Achèvement de la modification du modèle de troisième personne .

Bien sûr que ce n'est pas fini, Si vous pouviez juste finir ce que vous avez déjà fait , Ça n'explique pas la nécessité de ce nouveau truc . Ensuite, nous introduisons progressivement des caractéristiques différentes .

Résumé

Résumé succinct,InEnhancedInput Sous extension du système d'entrée , Nous avons des actifs supplémentaires qui peuvent être configurés pour fonctionner , C'est que nous pouvons faire quelque chose de spécial quand nous pouvons mettre en œuvre l'entrée ,Par exemple,IMC Vous pouvez configurer la cartographie des actions et des touches , Vous pouvez spécifier quelles entrées sont valides ;Par exemple,IA Définissons les actions une par une ;Par exemple,ModifierEtTrigger Vous pouvez configurer les conditions d'entrée en vigueur des touches et les effets d'entrée en vigueur, etc .

Le développement de jeux ordinaires n'a pas besoin de connaître les parties du Code de base , Il est déjà difficile de maîtriser son utilisation , La lecture du Code approfondit encore la configuration d'entrée 、 Compréhension du processus d'entrée des réponses , Mais si l'on examine l'origine de son but , J'espère encore améliorer ma compréhension du moteur ,Améliorer sa capacité globale.

RÉFÉRENCES

Illusoire 5.0 Documentation - Input

Illusoire 5.0 Documentation - Lyra Input Settings

L'auteur Yimi81 Article de《UE5 – EnhancedInput( Système d'entrée amélioré )》

Fiction en direct en chinois No39Période

Copyright:Cet article est[Athrun Aslan]Établi,Veuillez apporter le lien original pour réimprimer,remercier。 https://fra.fheadline.com/2022/134/202205141100542127.html