DeepSeek 답변.

 

언리얼 엔진에서 Walking 모드는 기본적으로 Z축(상하) 이동을 지원하지 않습니다. Walking 모드는 지면을 따라 이동하는 것을 전제로 설계되었기 때문에, Z축 이동을 구현하려면 추가적인 작업이 필요합니다. 아래는 Walking 모드에서 Z축 이동을 제어하기 위해 코드를 변경하는 방법입니다.


1. UCharacterMovementComponent 상속 및 확장

Walking 모드에서 Z축 이동을 구현하려면, UCharacterMovementComponent를 상속받아 커스텀 이동 로직을 추가해야 합니다.

예시: 커스텀 Movement Component 클래스

cpp
Copy
#include "GameFramework/CharacterMovementComponent.h"
#include "CustomMovementComponent.generated.h"

UCLASS()
class YOURGAME_API UCustomMovementComponent : public UCharacterMovementComponent
{
    GENERATED_BODY()

public:
    UCustomMovementComponent();

    // Z축 이동 입력을 처리하는 함수
    void AddZMovementInput(float ScaleValue);

protected:
    // 물리 업데이트 함수 오버라이드
    virtual void PhysWalking(float deltaTime, int32 Iterations) override;

    // Z축 이동 로직
    void HandleZMovement(float deltaTime);
};

2. Z축 이동 입력 처리

AddZMovementInput 함수를 통해 Z축 이동 입력을 받아들이고, 이를 내부 변수에 저장합니다.

예시: AddZMovementInput 구현

cpp
Copy
void UCustomMovementComponent::AddZMovementInput(float ScaleValue)
{
    // Z축 이동 입력을 저장
    ZMovementScale = ScaleValue;
}

3. Z축 이동 로직 추가

PhysWalking 함수를 오버라이드하여 Z축 이동 로직을 추가합니다.

예시: PhysWalking  HandleZMovement 구현

cpp
Copy
void UCustomMovementComponent::PhysWalking(float deltaTime, int32 Iterations)
{
    // 기본 Walking 물리 로직 실행
    Super::PhysWalking(deltaTime, Iterations);

    // Z축 이동 처리
    HandleZMovement(deltaTime);
}

void UCustomMovementComponent::HandleZMovement(float deltaTime)
{
    if (ZMovementScale != 0.0f)
    {
        // Z축 이동 계산
        FVector ZMovement = FVector(0.0f, 0.0f, ZMovementScale * deltaTime * 500.0f); // 500은 이동 속도

        // 캐릭터 위치 업데이트
        FHitResult Hit;
        SafeMoveUpdatedComponent(ZMovement, UpdatedComponent->GetComponentRotation(), true, Hit);

        // 이동 후 업데이트
        UpdateComponentVelocity();
    }
}

4. 캐릭터 클래스에서 커스텀 Movement Component 사용

�스텀 Movement Component를 캐릭터 클래스에서 사용하도록 설정합니다.

예시: 캐릭터 클래스 수정

cpp
Copy
#include "CustomMovementComponent.h"

UCLASS()
class YOURGAME_API AYourCharacter : public ACharacter
{
    GENERATED_BODY()

public:
    AYourCharacter(const FObjectInitializer& ObjectInitializer);

    // Z축 이동 입력 처리 함수
    void MoveUpDown(float ScaleValue);
};

// 생성자에서 Movement Component 교체
AYourCharacter::AYourCharacter(const FObjectInitializer& ObjectInitializer)
    : Super(ObjectInitializer.SetDefaultSubobjectClass<UCustomMovementComponent>(ACharacter::CharacterMovementComponentName))
{
}

void AYourCharacter::MoveUpDown(float ScaleValue)
{
    UCustomMovementComponent* CustomMovement = Cast<UCustomMovementComponent>(GetCharacterMovement());
    if (CustomMovement)
    {
        CustomMovement->AddZMovementInput(ScaleValue);
    }
}

5. 블루프린트에서 Z축 이동 입력 처리

이제 블루프린트에서 Z축 이동 입력을 처리하고, 캐릭터의 MoveUpDown 함수를 호출합니다.

블루프린트 예시

  1. 이벤트 그래프에서 MoveUpDown 입력 축 이벤트를 생성합니다.
  2. MoveUpDown 축 값을 AYourCharacter의 MoveUpDown 함수에 연결합니다.

6. 테스트

  • 게임을 실행하고 Z축 이동 입력(예: Up  Down 키)을 테스트합니다.
  • 캐릭터가 Z축으로 이동하는지 확인합니다.

추가 설명

  • Walking 모드의 제한: Walking 모드는 기본적으로 지면을 따라 이동하도록 설계되었기 때문에, Z축 이동을 추가하려면 물리 로직을 직접 수정해야 합니다.
  • 충돌 처리: Z축 이동 중 충돌이 발생할 경우, SafeMoveUpdatedComponent가 자동으로 처리합니다.
  • 이동 속도: Z축 이동 속도는 필요에 따라 조정할 수 있습니다.

이제 Walking 모드에서 Z축 이동을 제어할 수 있습니다! 필요에 따라 이동 로직을 더 복잡하게 확장할 수 있습니다.

+ Recent posts