UE4 57

[UE4] 캐릭터 무브먼트 컴포넌트

CharacterMovementComponent는 매번 언급할 때 이름이 너무 길기 때문에 CMC로 칭한다. CMC를 사용하는 캐릭터는 자동으로 클라이언트-서버 네트워킹이 탑재된다. 난 서버딸린 게임을 만들 생각은 아직 없기 때문에 구체적인 리플리케이션 방식에 대해선 언리얼 Document 원문을 참고하자. 아무튼 서버 네트워킹이 자동으로 탑재되어있다니 매우 편리한 컴포넌트임에는 틀림없다. What is CharacterMovement Component? CMC는 Character 소유자와 관련된 움직임 로직을 다루는 컴포넌트이다. CMC는 걷기, 떨어지기, 수영, 날기, 커스텀 등 다양한 움직임 모드를 지원한다. 움직임은 주로 최근 속도와 가속도의 영향을 받는다. 가속도는 지금까지 누적된 input벡터..

UE4 2022.11.24
[UE4] 위젯 UI 제작하기

위젯 UI 생성하기 캐릭터의 HP 값을 시각적으로 볼 수 있도록 UI 위젯을 제작하고 캐릭터위에 부착해보자. 먼저 위젯 블루프린트를 선택해 UI 에셋을 하나 생성해준다. 생성한 에셋에 들어간 후 다음과 같이 Canvas Panel을 제거하고 일반>Progress Bar을 드래그해 생성해준다. 그 후 감싸기 메뉴로 Vertical Box를 골라주면 세로로 UI 컨트롤들을 정렬해주는 Vertical Box가 ProgressBar컨트롤을 감싸게 된다. 그리고 팔레트의 프리미티브 그룹에서 Spacer컨트롤을 VerticalBox안에 있는 ProgressBar 위와 아래에 사진과 같이 추가한다. 이제 Vertical Box는 세 개의 컨트롤을 가지는데, 레이아웃을 잡기 위해 Vertical Box의 전체 영역 내..

UE4 2022.11.14
[UE4] UPROPERTY

UPROPERTY 변수는 변수 지정자 및 선언 위에 사용하는데, 메타데이터와 같은 추가 설명자와 함께 표준 C++ 구문을 사용하여 선언됩니다. 속성(property)을 선언함으로써 엔진 및 에디터의 다양한 측면에서 작동하는 방식을 제어할 수 있습니다. UPROPERTY([specifier, specifier, ...], [meta=(key=value, key=value, ...)]) Type VariableName; Garbage Collection GC는 오브젝트 계층구조를 designated된 UPROPERTY들을 통해 여행합니다. root objects부터 시작하게 되는데 AddToRoot, RemoveFromRoot 메서드를 통해 handle되는 root object들을 말하는 것입니다. 이 여행..

UE4 2022.11.12
[UE4] Unrecognized type Error 해결법

때로는 내가 생각해서 뭔가를 제작하는 것보다 그대로 따라하는 것이 더 어려울 때가 있다. 모방이 반복되다보면 제대로 이해하지 못한 채 따라만 하게 되고, 오류가 생겼을 때 (스펠링 틀리거나, 매우 사소한 오류) 해결하기가 더 어려워지는 것 같다. 이번 오류는 반년간 언리얼을 공부했지만 처음 겪는 오류였고 구글링해도 정보가 거의 나오지 않거나 도움이 되지 않았다. 이말인 즉슨 다른 사람들도 거의 하지 않을만한 어이없는 오류라는 소리였고(경험상) 최대한 마음을 비우고 삽질을 시작했다. # 사실 언리얼에 무슨 오류가 났을 때 대부분은 다음과 같은 방법으로 해결된다. 1. 기다린다. (언리얼은 가끔 업데이트가 느려 오류가 생길 때가 있다, 그렇다고 1분이상 기다리진 말것..) 2. 헤더파일을 추가한다. (언리얼..

UE4 2022.11.12
[UE4] 캐릭터 스텟 컴포넌트 만들기

캐릭터 스텟 컴포넌트를 만들어 이를 캐릭터에 부착해 캐릭터 스텟에 대한 관리를 액터 컴포넌트가 일임하도록 기능을 구현해보자. 먼저 Actor Component를 부모로 하는 새로운 클래스를 하나 생성해준다. 그리고 MyCharacter클래스에 해당 컴포넌트를 멤버 변수로 선언한다. UPROPERTY(VisibleAnywhere, Category = Stat) class UMyCharacterStatComponent* CharacterStat; 선언한 변수에 새롭게 Object를 생성해 대입해준다. CharacterStat = CreateDefaultSubobject(TEXT("CHARACTERSTAT")); 액터의 PostInitializeComponents에 대응하는 컴포넌트의 함수는 Initializ..

UE4 2022.11.12
[UE4] CSV 데이터 불러오기

엑셀에 저장돼 있는 캐릭터의 스탯 데이터 테이블을 언리얼 엔진에 불러들여보자. 캐릭터 스탯 데이터는 게임의 기반을 이루는 변하지 않는 데이터이므로 보통 게임 앱이 초기화될 때 불러들인다. 언리얼 엔진은 게임 앱을 관리하기 위한 용도로 GameInstance라는 언리얼 오브젝트를 제공한다. 이 인스턴스가 캐릭터의 스탯을 관리하도록 설계하면 게임 앱이 초기화될 때 캐릭터 스탯 데이터를 불러들이고, 앱이 종료할 때까지 스탯 데이터는 보존된다. GameInstance 클래스를 부모로 하는 클래스를 제작 후 프로젝트 세팅의 맵&모드로 들어가서 GameInstance항목을 우리가 만든 것으로 바꿔주면 게임 앱을 관리할 수 있다. 다음으로 원하는 캐릭터 스탯 데이터를 엑셀에 작성 후 CSV파일 형식으로 저장해준다. ..

UE4 2022.11.11
[UE4] 이펙트 구현하기

구현방법 1. MyBox Actor에 ParticleComponent 추가. 2. 원하는 Effect Asset을 ParticleComponent의 템플릿으로 지정한다. 3. ParticleComponent에서 제공하는 OnSystemFinished 델리게이트에 멤버 함수를 하나 연결해 이펙트 재생이 종료되면 아이템 상자가 제거되도록 하기. 4. Effect가 재생될 때는 액터의 Collision 기능 제거, 박스 스태틱메시도 액터가 제거될 때까지 안보이게 설정. Effect = CreateDefaultSubobject(TEXT("EFFECT")); Effect->SetupAttachment(RootComponent); //파티클 에셋 불러온 후 적용 static ConstructorHelpers::FO..

UE4 2022.11.11
[UE4] 아이템 상자 제작

콜리전 설정 ItemBox라는 이름으로 오브젝트 체널을 하나 생성한 후 프리셋도 하나 생성해서 기본 반응은 무시, MyCharacter와의 콜리전 반응만 겹침으로 설정해준다. 캐릭터의 ItemBox에도 마찬가지로 겹침 반응을 설정해야 한다. (콜리전 켜짐 메뉴의 값은 Query Only로 지정하고 오브젝트 유형은 ItemBox로 지정해준다. ) 델리게이트 언리얼에서 제공하는 BoxComponent에는 Overlap Event를 처리할 수 있게 OnComponentBeginOverlap이라는 이름의 멀티캐스트 다이내믹 델리게이트가 선언되어 있다. 유형과 인자를 모두 복사해 매크로 설정과 동일한 멤버 함수를 선언하고 이를 해당 델리게이트에 바인딩한다. 그럼 위에서 설정한 겹침(Overlap)이벤트가 발생할 ..

UE4 2022.11.11
[UE4] 무기 액터 제작

무기 액터 생성 새로운 C++클래스 추가> Actor클래스 하나 만들기 -> 스켈레탈 메쉬를 담을 변수를 헤더에 하나 선언 후 코드에서 스켈레탈 메쉬 불러와서 액터에 적용시켜주기. AMyWeapon::AMyWeapon() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = false; //무기 오브젝트 만들고 애셋 적용하기 Weapon = CreateDefaultSubobject(TEXT("WEAPON")); RootComponent = Weapon; static ConstructorHelpers..

UE4 2022.11.09
[UE4] 캐릭터 에셋에 붙어있는 무기제거

보통의 경우 캐릭터 스켈레탈 메쉬를 프로젝트에 임포트하면 무기는 붙어있지 않은 것이 일반적이다. 하지만 특히 언리얼의 혜자 무료에셋인 Paragon 시리즈의 캐릭터에셋들을 보면 스켈레탈 메쉬에 무기가 함께 붙어있는 것을 확인할 수 있다. 아마 캐릭터 애니메이션에 무기 애니메이션도 함께 연결하고 싶어서 묶지 않았을까 싶지만 지금 내가 만드는 게임의 경우 무기를 유동적으로 교체하기 위해 기본으로 달려있는 무기를 떼어야 한다. 내가 붙여넣고 싶은 무기가 저 커다란 기본 무기에 가려져있다. 어서 없애버리자. 제거법 사실 구글링을 열심히 해보고 아는 지식으로 여러가지 시도도 해봤지만 칼자체를 깔끔하게 캐릭터에서 떼어낼 방법은 찾지 못했다. 사실 어찌보면 당연한게 캐릭터와 '한 몸'인 상태로도 볼 수 있기에 만약 ..

UE4 2022.11.08