UE5 스터디 기록

UE5 정복

UE5 정복

UE5 배운 내용들 메모로 남기자.

1일차 (2023년 3월 21일 20:00 ~ 22:00)

  1. 새 프로젝트 만들기 – 이름: StartMac, Empty 템플릿, C++
  2. 콘텐츠 생성: 레벨, 이름: GameMap
  3. GameMap 열기
  4. C++ 버전의 게임 모드 베이스 만들기 – MyGameModeBase 클래스 타입은 정하지 않은 상태로 두기
  5. 월드 세팅 창 열고 게임모드 오버라이드를 MyGameModeBase로 지정
  6. MyGameModeBase.h 코드 편집 – 코드 중 STARTMAC_API 부분은 각자의 프로젝트명에 맞게 변경해야 함
    UCLASS()
     class STARTMAC_API AMyGameModeBase : public AGameModeBase
     {
         GENERATED_BODY()
     
     public:
         AMyGameModeBase();
     
     };
    
  7. MyGameModeBase.cpp 코드 편집
    AMyGameModeBase::AMyGameModeBase()
    {
        // set default pawn class to our Blueprinted character
        static ConstructorHelpers::FClassFinder<APawn> PlayerPawnBaseBPClass(TEXT("/Game/BP_ThirdPersonCharacter"));
        if (PlayerPawnBaseBPClass.Class != NULL)
        {
            DefaultPawnClass = PlayerPawnBaseBPClass.Class;
        }
    }
    
  8. 에디터 실행하면 시 BP_ThirdPersonCharacter 찾을 수 없다는 경고창 나온다. 정상.
  9. 블루프린트 클래스 추가 – 종류: 캐릭터, 이름: BP_ThirdPersonCharacter
  10. C++ 클래스 추가 – 종류: 캐릭터, 이름: MyGameCharacter
  11. BP_ThirdPersonCharacter 애셋 열고 상단 메뉴 파일블루프린트 부모변경MyGameCharacter
  12. UnrealEngine\Templates\TemplateResources\High\Characters\Content\Mannequins\Meshes\SKM_Quinn.uasset 파일을 내 프로젝트 콘텐츠 폴더로 복사
  13. BP_ThirdPersonCharacter 애셋의 최상위 컴포넌트 선택하고 디테일 패널에서 Skeletal Mesh AssetSKM_Quinn으로 지정
  14. MyGameCharacter.h 코드 편집 – GENERATED_BODY() 아래에 다음 코드 삽입
    UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MyInput, meta = (AllowPrivateAccess = "true"))
    class UInputMappingContext* DefaultMappingContext;
    
    UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MyInput, meta = (AllowPrivateAccess = "true"))
    class UInputAction* JumpAction;
    
    UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MyInput, meta = (AllowPrivateAccess = "true"))
    class UInputAction* MoveAction;
    
    UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = MyInput, meta = (AllowPrivateAccess = "true"))
    class UInputAction* LookAction;
    
  15. MyGameCharacter.h 코드 편집 – protected: 아래에 다음 코드 삽입
    void Move(const FInputActionValue& Value);
    void Look(const FInputActionValue& Value);
    
  16. 빌드 해 보면 여러 가지 빌드 오류들이 날 것
  17. StartMac.Build.cs 파일 열어 PublicDependencyModuleNames 변수에 EnhancedInput 항목 추가
  18. MyGameCharacter.cpp 코드 편집 – 헤더 파일 맨 뒤에 추가
    #include "EnhancedInputComponent.h"
    #include "EnhancedInputSubsystems.h"
    
  19. MyGameCharacter.h 코드 편집 – #include "MyGameCharacter.generated.h" 줄 위에 추가
    #include "InputActionValue.h"
    
  20. 빌드 정상적으로 완료되는지 확인
  21. MyGameCharacter.cpp 코드 편집. 캐릭터 조작 입력 바인딩의 실질적인 구현.
    void AMyGameCharacter::BeginPlay()
    {
        Super::BeginPlay();
    
        if (const APlayerController* PlayerController = Cast<APlayerController>(Controller))
        {
            if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PlayerController->GetLocalPlayer()))
            {
                Subsystem->AddMappingContext(DefaultMappingContext, 0);
            }
        }
    }
    
    void AMyGameCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
    {
        Super::SetupPlayerInputComponent(PlayerInputComponent);
    
        if (UEnhancedInputComponent* EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(PlayerInputComponent))
        {
            EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Triggered, this, &ACharacter::Jump);
            EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Completed, this, &ACharacter::StopJumping);
    
            EnhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Triggered, this, &AMyGameCharacter::Move);
            EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &AMyGameCharacter::Look);
        }
    }
    
    void AMyGameCharacter::Move(const FInputActionValue& Value)
    {
        const FVector2D MovementVector = Value.Get<FVector2D>();
    
        if (Controller != nullptr)
        {
            const FRotator Rotation = Controller->GetControlRotation();
            const FRotator YawRotation(0, Rotation.Yaw, 0);
    
            const FVector ForwardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
            const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);
    
            AddMovementInput(ForwardDirection, MovementVector.Y);
            AddMovementInput(RightDirection, MovementVector.X);
        }
    }
    
    void AMyGameCharacter::Look(const FInputActionValue& Value)
    {
        const FVector2D LookAxisVector = Value.Get<FVector2D>();
    
        if (Controller != nullptr)
        {
            AddControllerYawInput(LookAxisVector.X);
            AddControllerPitchInput(LookAxisVector.Y);
        }
    }
    
  22. 콘텐츠 생성: 입력입력 매핑 컨텍스트 1개, 이름: IMC_Default
  23. 콘텐츠 생성: 입력입력 액션 3개, 이름 IA_Jump, IA_Move, IA_Look
  24. 편집프로젝트 세팅...프로젝트맵 & 모드에 들어가서 에디터 시작 맵, 게임 기본 맵GameMap으로 변경
  25. 카메라를 제대로 작동하도록 해 보자.
  26. MyGameCharacter.h 파일에 프로퍼티 추가
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = MyCamera, meta = (AllowPrivateAccess = "true"))
    class USpringArmComponent* CameraBoom;
    
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = MyCamera, meta = (AllowPrivateAccess = "true"))
    class UCameraComponent* FollowCamera;
    
  27. MyGameCharacter.cpp 파일 생성자에 코드 삽입
    // controller 회전 시에 캐릭터도 회전하게 하지 않는다. 카메라만 회전하면 된다.
    bUseControllerRotationPitch = false;
    bUseControllerRotationYaw = false;
    bUseControllerRotationRoll = false;
    
    GetCharacterMovement()->bOrientRotationToMovement = true;
    GetCharacterMovement()->RotationRate = FRotator(0.0f, 500.0f, 0.0f);
    
    GetCharacterMovement()->JumpZVelocity = 700.f;
    GetCharacterMovement()->AirControl = 0.35f;
    GetCharacterMovement()->MaxWalkSpeed = 500.f;
    GetCharacterMovement()->MinAnalogWalkSpeed = 20.f;
    GetCharacterMovement()->BrakingDecelerationWalking = 2000.f;
    
    CameraBoom = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom"));
    CameraBoom->SetupAttachment(RootComponent);
    CameraBoom->TargetArmLength = 400.0f;
    CameraBoom->bUsePawnControlRotation = true;
    
    FollowCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowCamera"));
    FollowCamera->SetupAttachment(CameraBoom, USpringArmComponent::SocketName);
    FollowCamera->bUsePawnControlRotation = false;
    
  28. 카메라 제어도 이제 된다.




컬러뮤지엄 홍보 영상

아이폰 앱을 이용해서 만들어봤다. 배우는 것도 재미있었고, 만들어진 것도 재미있다. (ㅎㅎ)

CDN에 이미지를 올린 것이다.

발췌문은 이렇게 쓰면 되는군. 그렇지만 한국어에 이탤릭체는 딱 어울리지는 않는다.

내가 한 말
  • 컬럼을 나눠봤다. 첫 번째 컬럼이다.
  • 흐흐흐
  • 여기가 두 번째 컬럼
  • 컬럼 컬럼 마이 프레셔스…
https://wp2.plusalpha.top/%eb%82%b4%ea%b0%80-%eb%a7%8c%eb%93%a0-%ec%83%88%eb%a1%9c%ec%9a%b4-%ed%8e%98%ec%9d%b4%ec%a7%80

또 새로운 포스트

으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가? 으아아아아 내용이 아주아주 길어지면 어떻게 되는가?

아아아아아아~~~

-_-;

  • 순서 1
  • 순서 2
  • 순서 3



Copyright © 2025. All Rights Reserved. PAGS by Flytonic.