UE4 57

[UE4] 스켈레톤 & 소켓 시스템

소켓 소켓이란 스켈레탈 메시 내의 Born에서 약간 Offset을 준 부분을 말한다. 그런 다음 Born을 기준으로 소켓의 위치, 방향, 크기를 조절한다. 스태틱 메시, 스켈레탈 메시는 소켓에 미리 붙여볼 수 있어, 콘텐츠 제작자는 스켈레탈 메시의 소켓을 구성한 다음, 프로그래머에게 오브젝트를 붙일 소켓 이름만 알려주면 된다. 소켓을 생성하려면 일단 스켈레탈 메시를 더블클릭해서 들어간 후 스켈레톤 트리 패널에서 소켓추가를 선택해 추가할 수 있다. 소켓은 Born 이름 옆에 소켓 아이콘으로 표시된다. 원하는 소켓을 우클릭하고 프리뷰 애셋 추가 메뉴를 선택한 후 원하는 악세사리를 캐릭터에 부착해 볼 수 있다. 스켈레톤 애셋 언리얼4에서의 스켈레톤 애셋은 기본적으로 Born의 이름과 계층구조의 목록이다. Bo..

UE4 2022.11.03
[UE4] FMath의 선형보간법 종류와 차이점

개요 게임 개발을 하다보면 자연스러운 동작을 구현하기 위해 선형보간법을 사용한다. 언리얼에서 자주 사용하는 선형보간법에는 크게 3가지가 있다. 1. FMath::Lerp https://docs.unrealengine.com/4.26/en-US/API/Runtime/Core/Math/FMath/Lerp/1/ FMath::Lerp Performs a linear interpolation between two values, Alpha ranges from 0-1 docs.unrealengine.com 두 값 사이의 선형 보간 수행( Alpha 범위 0~1 ), Alpha값을 이미 정해놓은 경우에 사용한다. FInterpTo보다 구현이 간단한 편이다. template static T Lerp ( const T ..

UE4 2022.10.22
[UE4] 공격 시 조금씩 앞으로 가는 기능 구현하기

구현방법 구글링과 유튜브를 찾아보다가 아주 쉬운 방법을 발견했다. 바로 AddImpulse함수를 사용하는 것이다. 이 함수에 관한 설명은 https://coding-hell.tistory.com/73 에 있으니 참고하자. 원리는 캐릭터에 충격을 가하는 것이다. 이렇게 되면 선형보간을 할 필요도 없어지고 CharacterMovementComponent에서 제공하는 함수이므로 물리가 적용된다. 더이상 다른 물체를 뚫고 나가거나 언덕을 못오를 일이 없다. 1. Character헤더에 가할 힘을 변수로 선언한다. 물론 생성자에서 원하는 값으로 초기화해주도록 한다. UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = Attack, Meta = (AllowP..

UE4 2022.10.22
[UE4] 마우스휠로 카메라 줌(Zoom)기능 구현하기

구현 방법 1. 먼저 프로젝트세팅>입력 으로 들어가서 액션매핑에 ZoomIn과 ZoomOut을 만들어준다. 2. 설정한 입력 세팅을 캐릭터 클래스의 SetupPlayerInputComponent()함수에서 원하는 함수와 바인딩 시켜준다. void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); // 설정한 입력 세팅을 Pawn의 함수와 Binding시키기. PlayerInputComponent->BindAction(TEXT("ZoomIn"), EInputEvent::IE_Pressed, this, &AMyCha..

UE4 2022.10.21
[UE4] 데미지 프레임워크

TakeDamage() 언리얼 엔진의 액터 클래스 AActor에는 TakeDamage라는 함수가 구현돼 있다. 이 함수를 사용하면 손쉽게 액터에 데미지를 전달할 수 있다. TakeDamage 함수는 총 네 개의 인자를 가지고 있다. - DamageAmount : 전달할 데미지의 세기 - DamageEvent : 데미지 종류 - EventInstigator : 공격 명령을 내린 가해자 - DamageCauser : 데미지 전달을 위해 사용한 도구 여기서 데미지를 가한 진정한 가해자는 폰이 아니라 폰에게 명령을 내린 플레이어 컨트롤러라고 할 수 있으므로 EventInstigator에는 폰정보가 아닌 플레이어 컨트롤러의 정보를 보내줘야 한다. if (bResult)//충돌이 감지되면 { if (HitResul..

UE4 2022.10.21
[UE4] 디버그 드로잉(Debug Drawing)

디버그 드로잉 기능을 사용하려면 소스 상단에 DrawDebugHelpers.h 헤어를 추가해야 한다. 이 헤더에는 다양한 그리는 함수들이 선언돼 있다. 그 중에서 캡슐 모양을 그리는 기능인 DrawDebugCapsule()함수를 사용하여 탐색을 위해 원이 움직인 궤적을 표현해본다. 캡슐의 반지름을 설정하고 탐색 시작 위치에서 끝 위치로 향하는 벡터를 구한 후, 벡터의 중점 위치와 벡터 길이의 절반을 대입하면 우리가 원하는 크기의 캡슐 모양을 구할 수 있다. 캡슐 방향을 회전시키려면 회전 행렬을 적용하면 된다. 캡슐을 캐릭터 시선 방향과 일치하게 회전시키려면 FRotationMatrix 의 MakeFromZ함수에 캐릭터의 시선 방향 벡터를 입력해 필요한 회전 좌표축을 생성할 수 있다. #if ENABLE_..

UE4 2022.10.20
[UE4] 가비지 컬렉션(Garbage Collection)

언리얼 실행 환경은 메모리에 떠있는 언리얼 오브젝트가 사용 중인지 아닌지를 주기적으로 검사하고, 사용하지 않는 물체는 메모리에서 자동 제거하는 가비지 컬렉션을 제공한다. 언리얼 오브젝트가 사용 중인지 여부는 다른 언리얼 오브젝트가 해당 오브젝트를 참조하는지로 판단하는데, FHitResult의 멤버 변수 Actor의 선언이 일반 참조로 선언된다면 해당 함수에서의 참조로 인해 제거돼야 할 액터가 메모리에 그대로 남아있는 문제가 발생할 수 있다. 이러한 문제를 방지하기 위해 FHitResult는 참조로부터 자유롭게 포인터 정보를 전달해주는 약 포인터(TWeakObjectPtr) 방식으로 멤버변수를 선언했다. 약 포인터로 지정된 액터에 접근하려면 IsValid()함수를 이용해 사용하려는 액터가 유효한지 먼저 점..

UE4 2022.10.20
[UE4] 물리엔진

콜리전(Collision) 물리 엔진을 활용하려면 콜리전이라 불리는 물리적 충돌영역을 알아야 한다. 언리얼 엔진에서 콜리전은 크게 세가지 방법으로 제작할 수 있다. 1. 스태틱메시 에셋 스태틱메시 에셋에 콜리전 영역을 심는 방법이다. 스태틱메시를 더블 클릭하면 열리는 스태틱메시 에디터에서 해당 콜리전 영역을 설정하고 확인할 수 있다. 스태틱메시에 콜리전을 심으면 비주얼과 충돌이라는 두가지 기능을 설정할 수 있어 관리가 간편해진다. 2. 기본 도형 컴포넌트 구체, 박스, 캡슐의 기본 도형을 사용해 충돌 영역을 지정하는 방법이다. 스태틱메시와 별도로 충돌 영역을 제작하는데 사용한다. 스켈레탈 메시를 움직일 때 주로 사용한다. 3. 피직스 에셋 일반적으로 캐릭터의 이동은 캡슐 컴포넌트를 사용해 처리한다. 하지..

UE4 2022.10.20
[UE4] 델리게이트(Delegate)

특정 객체가 해야 할 로직을 다른 객체가 대신 처리할 수 있도록 만드는 보편적인 설계의 개념이다. 언리얼 엔진의 델리게이트는 A객체가 B객체에게 작업 명령을 내릴 때 B객체에 자신을 등록하고 B의 작업이 끝나면 A에게 알려주는 설계방식을 의미한다. 로직 순서 1. A의 함수를 B에 등록 2. B에게 A가 명령. 3. B가 A의 명령을 실행. 4. 1에서 등록한 A의 함수를 호출. 애님 인스턴스에서 제공하는 델리게이트 애님 인스턴스에는 에니메이션 몽타주 재생이 끝나면 발동하는 OnMontageEnded라는 델리게이트를 제공한다. 어떠한 언리얼 오브젝트라도 UAnimMontage* 인자와 bool 인자를 가진 멤버 함수를 가지고 있다면, 이를 OnMontageEnded 델리게이트에 등록해 몽타주 재생이 끝나..

UE4 2022.10.19
[UE4] 애니메이션 몽타주(Animation Montage)

애니메이션 몽타주란? 애니메이션 몽타주는 폭넓은 애니메이션 이펙트가 가능해지는 다목적 툴로써, 주로 코드를 통해서나 플루프린트 비주얼 스크립트 안에서 애니메이션 컨트롤을 노출시키는 데 관련되어 있다. 몽타주를 사용하면 블루프린트 또는 코드를 통해 애니메이션 애셋을 바로 제어할 수 있다. 여러 애니메이션 시퀀스를 하나의 애셋으로 합칠 수 있으며, 이를 섹션으로 나누어 그 일부 또는 조합 재생이 가능하다. 몽타주 안에서 이벤트를 발동시켜 다양한 로컬이나 리플리케이트 작업을 할 수 있는데, 예를 들면 사운드 큐나 파티클 이펙트 재생, 탄환 수와 같은 플레이어 값 변경, 심지어 네트워크 게임에서 루트 모션 리플리케이션(복제)도, 애니메이션에 루트 모션이 켜진 경우 가능하다. 몽타주 활용예시 로직 기반 애니메이션..

UE4 2022.10.19