UE4 57

[UE4] 디버깅 모드로 에디터 켜기

언리얼의 C++ 솔루션 파일에서 F5키를 눌러 디버그를 실행하면 에디터가 자동으로 켜진다. 이렇게 에디터를 디버그 모드로 키게 되면 디버깅에도 유리할 뿐 아니라, 핫 리로드 방식보다 빠르다. 수정한 코드를 반영하고 싶다면 큐브모양의 컴파일 버튼을 누르면 된다. 컴파일 옆에 작은 화살표를 누르면 아직 실험단계인 라이브 코딩 활성화가 있는데 이를 사용하면 컴파일없이 실시간으로 내 코드 변경사항이 플레이를 끄지 않아도 적용된다. 하지만 아직 실험단계인 만큼 오류가 많다고 하니 활용에 유의하자. 참고로 라이브 코딩 후 ctrl+alt+f11을 누르면 적용된다.

UE4 2022.10.05
[UE4] GTA 방식의 카메라 구현

Character 클래스에 함수를 작성하고, 스프링암을 활용해서 GTA 방식의 삼인칭 조작에 관련된 기능을 설정해보자. ControlRotation(컨트롤 회전) PlayerController는 플레이어의 의지를 나타내는 ControlRotation이라는 속성을 제공한다. 플레이어의 입력값을 컨트롤 회전에 연동하는 방법을 알아보자. 일단 프로젝트 세팅의 입력설정에서 원하는 키를 설정한 후 AddControllerInputYaw, Roll, Pitch라는 세가지 명령을 사용하면 PlayerController의 ControlRotation값이 입력에 따라 변한다. 이러한 컨트롤 회전 값은 캐릭터의 카메라 설정에서 다양하게 사용된다. 플레이어 컨트롤러에서는 마우스 입력 값에 따라 변화하는 컨트롤 회전 값의 스..

UE4 2022.10.05
[UE4] Pawn & Character

폰(Pawn)이란? 폰은 움직이는 액터에 조종당하는 기능이 추가된 액터다. 자동차가 될 수도 비행기가 될 수도 인간이 될 수도 있다. 내가 설정한 입력 세팅을 폰의 함수와 Binding 했다면, 이를 폰의 움직임으로 활용해야 한다. 폰의 움직임 PawnMovementComponent의 AddMovementInput()를 사용하면 -1부터 1사이의 입력 값을 PawnMovementComponent에 전달해서 폰을 움직이게 만든다. 자동차에 비유하자면 PawnMovementComponent는 엔진이고 AddMovementInput()명령은 운전석의 인터페이스라 할 수 있다. 이 명령에 들어가는 Scale값은 액셀을 밟는 세기를 의미한다. AddMovementInput()에는 추가로 이동할 방향을 WorldD..

UE4 2022.09.30
[UE4] 코드로 에셋 적용시키기

에셋 지정 게임이 시작하기 전 생성자함수에서 에셋을 지정하려면 ConstructorHelpers::FObjectFinder를 사용하면 된다. 이때 에셋 경로는 변하지 않을 고유값이므로 static을 붙여주고 if + Succeeded()로 에셋이 불러와졌을때만 메쉬에 적용해주는 부분이 중요하다. static ConstructorHelpers::FObjectFinderSM_KWANG(TEXT("SkeletalMesh'/Game/Assets/ParagonKwang/Characters/Heroes/Kwang/Meshes/KwangRosewood.KwangRosewood'")); if (SM_KWANG.Succeeded()) { Mesh->SetSkeletalMesh(SM_KWANG.Object); } 이번에는..

UE4 2022.09.30
[UE4] Animation Blueprint

Animation Blueprint 코드로 에셋 경로를 복사해와 일일히 애니메이션을 지정하는 방법은 게임의 규모가 커지만 관리적인 한계에 부딪힌다. 그래서 언리얼은 체계적으로 애니메이션을 설계하도록 별도의 시스템을 제공하는데, 이를 애니메이션 블루프린트라고 한다. 생성 Animation Blueprint Asset을 생성하려면 콘텐츠 브라우저에서 애니메이션 폴더를 선택한 후 신규추가>애니메이션>애니메이션 블루프린트 메뉴를 선택하고 이 블루프린트와 연결될 캐릭터 스켈레톤 에셋을 지정해주면 된다. 관리 애니메이션 블루프린트는 애님그래프 로직에 따라 동작하는 캐릭터 애니메이션 시스템을 구동시키는데, C++코드에서는 AnimInstance라는 클래스로 이를 관리할 수 있다. 연결 스켈레탈 메시 컴포넌트는 자신이..

UE4 2022.09.30
[UE4] An Unreal process has crashed

해결과정 디버깅을 돌려보니 BindAxis함수에서 nullptr 오류가 잡힌다. this가 nullptr이라면 이 함수를 호출한 포인터 연산이 잘못되었다는건데.. 그래서 코드를 유심히 들여다보았다. void AMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); PlayerInputComponent->BindAxis(TEXT("UpDown"), this, &AMyPawn::UpDown); PlayerInputComponent->BindAxis(TEXT("LeftRight"), this, &AMyPawn::LeftRight); ..

UE4 2022.09.30
[UE4] InputComponent

프로젝트 세팅의 입력설정에서 언리얼 엔진이 제공하는 가상 입력 설정을 사용할 수 있다. 이를 사용하면 다양한 기기와 멀티 플랫폼에 효과적으로 대응할 수 있다. 설정이 완료되면 폰의 게임 로직에서 이를 사용하도록 코드를 작성한다. 언리얼 엔진은 입력 설정을 처리하기 위해 InputComponent라는 언리얼 오브젝트를 제공한다. 입력 설정과 폰 연결(Binding)시키기 폰의 SetupInputComponent()함수에서 연결할 수 있다. InputComponent는 BindAxis와 BindAction이라는 두 가지 함수를 제공한다. 폰이 이를 이용해 신호를 받으려면 입력 설정의 이름과 이와 연동할 언리얼 오브젝트 인스턴스의 함수 포인터를 지정한다. PlayerInputComponent->BindAxis..

UE4 2022.09.30
[UE4] 버전업 이후 달라진 것들

1. 4.22 버전부터 Possess함수 대신 OnPossess함수를 상속받도록 구조가 변경됐다. 2. 4.27 버전에선 CapsuleComponent가 SceneComponent와 호환되지 않는다 와같은 오류가 발생할 수 있는데, #include "Components/CapsuleComponent.h" 헤더파일을 추가해주면 간단히 해결된다. 3. 버전업 이후 수많은 헤더파일들이 세분화되어서 2번과 같은 오류나, 불완전한 클래스형식 "%$#%@%"에 대한 포인터 연산을 허용할 수 없다 와 같은 오류가 자주 발생한다. 이럴 땐 간단히 해당 클래스나 함수명, 변수명을 구글링한 후 언리얼 Documents에서 알려주는 헤더파일을 추가해주면 된다.

UE4 2022.09.26