Wie man den Oberkörper von UE5.1-Animationen nicht mischtC++

Programme in C++. Entwicklerforum
Anonymous
 Wie man den Oberkörper von UE5.1-Animationen nicht mischt

Post by Anonymous »

Ich habe ein Projekt Unreal Engine 5.1 gemacht, bei dem ich dieses Tutorial verwendet habe, um Charakterbewegungen und Animationen einzurichten. Ich benutze diesen Vermögenswert als Spieler. Mein Problem ist, dass die Bewegungsanimationen (d. H. Laufen und Gehen) mit der Angriffsanimation über das gesamte Rig mischen. Dies führt dazu, dass die Animationen kaputt erscheinen, insbesondere wenn der Angriff und die laufenden Animationen gleichzeitig abgespielt werden. Wenn es eine bessere Möglichkeit gibt, eine MP4 -Datei zum Stapelüberlauf zu vermitteln, lassen Sie es mich bitte in den Kommentaren wissen. Das Video zeigt die Animation, die relativ gut funktioniert, wenn der Spieler untätig ist oder spaziert, und sieht völlig gefickt aus, wenn der Spieler läuft. Wenn es eine Möglichkeit gibt, die Mischung am Oberkörper des Charakters zu deaktivieren, glaube ich, dass die Animation nicht so überflutet aussehen würde. Hier ist mein Code für das Spielen der Animation unten als Referenz. Jede Hilfe wird geschätzt.

Code: Select all

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "Misc/OutputDevice.h"
#include "Misc/OutputDeviceNull.h"
#include "UsefulDefs.h"
#include "Animation/AnimSequence.h"
#include "KiritoCharacter.generated.h"

UCLASS()
class IHATEUNREALENGINE_API AKiritoCharacter : public ACharacter
{
GENERATED_BODY()
public:
AKiritoCharacter();
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
virtual void Tick(float DeltaTime) override;
protected:
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
class USpringArmComponent* SpringArmComp;
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
class UCameraComponent* CameraComp;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Anims")
class UAnimMontage *attackMontage;
class UAnimSequence *attackAnimation;
void BeginSprint();
void EndSprint();
void BeginCrouch();
void EndCrouch();
void SwingSword();
void MoveForward(float InputAxis);
void MoveRight(float InputAxis);
virtual void BeginPlay() override;
private:
};
Quelle:

Code: Select all

#include "KiritoCharacter.h"
#include "GameFramework/SpringArmComponent.h"
#include "GameFramework/CharacterMovementComponent.h"
#include "Camera/CameraComponent.h"
#define MoveDir(axis)\
if (!axisValue) return;\
const FRotator rotator(.0, Controller->GetControlRotation().Yaw, .0);\
AddMovementInput(FRotationMatrix(rotator).GetUnitAxis(EAxis::axis), axisValue)
constexpr float sensitivity = .3f;
constexpr float runSpeed = 1000.f, walkSpeed = 600.f;
DECLARE_LOG_CATEGORY_EXTERN(GameLog, Log, All);
DEFINE_LOG_CATEGORY(GameLog);
AKiritoCharacter::AKiritoCharacter()
{
static ConstructorHelpers::FObjectFinder  anim(TEXT("/Game/ParagonKwang/Characters/Heroes/Kwang/Animations/PrimaryAttack_A_Slow"));
attackAnimation = anim.Object;
SpringArmComp = CreateDefaultSubobject(TEXT("spring arm component"));
CameraComp = CreateDefaultSubobject(TEXT("camera component"));
GetMesh()->SetRelativeLocationAndRotation(FVector(.0f, .0f, -90.0f), FQuat(FRotator(.0f, /*-90*/.0f, .0f)));
SpringArmComp->SetupAttachment(GetMesh());
CameraComp->SetupAttachment(SpringArmComp, USpringArmComponent::SocketName);
SpringArmComp->bUsePawnControlRotation = true;
SpringArmComp->TargetArmLength = 260.0f;
SpringArmComp->SocketOffset = FVector(.0, -50.0, 150.0);
SpringArmComp->bDoCollisionTest = false;
auto charMoveComp = GetCharacterMovement();
charMoveComp->RotationRate = FRotator(sensitivity);
charMoveComp->bOrientRotationToMovement = charMoveComp->bUseControllerDesiredRotation = charMoveComp->bIgnoreBaseRotation = true;
PrimaryActorTick.bCanEverTick = true;
}
void AKiritoCharacter::BeginPlay()
{
Super::BeginPlay();
}
void AKiritoCharacter::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
void AKiritoCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis("MoveForward", this, &AKiritoCharacter::MoveForward);
PlayerInputComponent->BindAxis("MoveRight", this, &AKiritoCharacter::MoveRight);
PlayerInputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput);
PlayerInputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput);
PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);
PlayerInputComponent->BindAction("Jump", IE_Released, this, &ACharacter::StopJumping);
PlayerInputComponent->BindAction("Crouch", IE_Pressed, this, &AKiritoCharacter::BeginCrouch);
PlayerInputComponent->BindAction("Crouch", IE_Released, this, &AKiritoCharacter::EndCrouch);
PlayerInputComponent->BindAction("Sprint", IE_Pressed, this, &AKiritoCharacter::BeginSprint);
PlayerInputComponent->BindAction("Sprint", IE_Released, this, &AKiritoCharacter::EndSprint);
PlayerInputComponent->BindAction("SwordSwing", IE_Released, this, &AKiritoCharacter::SwingSword);
}
void AKiritoCharacter::SwingSword() {
GetMesh()->GetAnimInstance()->Montage_Play(attackMontage);
}
void AKiritoCharacter::MoveForward(float axisValue) {
MoveDir(X);
}
void AKiritoCharacter::MoveRight(float axisValue) {
MoveDir(Y);
}
void AKiritoCharacter::BeginSprint() {
GetCharacterMovement()->MaxWalkSpeed = runSpeed;
}
void AKiritoCharacter::EndSprint() {
GetCharacterMovement()->MaxWalkSpeed = walkSpeed;
}
void AKiritoCharacter::BeginCrouch() {
Crouch();
}
void AKiritoCharacter::EndCrouch() {
UnCrouch();
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post