UE5 60

[UE5] 블루아카이브 TPS게임 개발일지 (9) - 근접 공격 히트박스 구현

F를 누르면 펀치와 킥 중 하나가 랜덤으로 나가는 것까지 구현했었다. 적 모델링을 임포트한 김에, 근접 공격의 판정을 만들어보았다.  아래 이미지는 현재 펀치와 킥 모션이다. 각각 왼손, 오른발로 공격한다.   따라서 이 두 부위에 히트박스를 만들어주어야 한다. 히트박스는 블루프린트에서든 C++에서든 만들 수 있는데, 이번엔 C++로 만들어보았다. 헤더에 선언한 USphereComponent 포인터. USphereComponent는 구형 콜라이더이다. 즉 히트박스이다.UPROPERTY(EditDefaultsOnly, Category = Hitbox)USphereComponent* PunchHitbox;UPROPERTY(EditDefaultsOnly, Category = Hitbox)USphereCompo..

[UE5] 블루아카이브 TPS게임 개발일지 (8) - 적 모델링 임포트

작중 적으로 등장할 캐릭터는 카이저 PMC 병사이다.   그런데 칸나의 3d 모델링은 부스에서 구할 수 있었지만, 아무리 찾아봐도 카이저 PMC 병사의 모델링은 구할 수 없었다.그래서 비슷한 모델링을 찾기 위해 sketchfab에서 cyborg 태그로 검색해보았다.  https://sketchfab.com/3d-models/security-cyborg-94ea8c717c374e3fa8aaa7549235b323 Security Cyborg - Download Free 3D model by fletcherkinnear - SketchfabOpen with QR Code: Scan this code to open the model on your device, then, tap on the AR icon. Op..

[언리얼 엔진 5] 언리얼 엔진에서의 OnTriggerEnter (OnComponentBeginOverlap)

유니티로 게임을 개발해본 사람은, OnTriggerEnter 혹은 OnCollisionEnter를 사용하여 무언가 이벤트가 발생하도록 해본 경우가 많을 것이다. 언리얼 엔진에서는 비슷한 것으로 OnComponentBeginOverlap 델리게이트가 있다. 여기서 Component는 Box/Capsule/Sphere Collision이 될 수 있겠다. 델리게이트라는 단어가 생소하다면, 이벤트라고 이해하면 된다. https://docs.unrealengine.com/5.3/ko/delegates-and-lamba-functions-in-unreal-engine/ 델리게이트 C++ 오브젝트 상의 멤버 함수를 가리키고 실행시키는 데이터 유형입니다. docs.unrealengine.com UnityEvent를 사..

[언리얼 엔진 5] BlueprintNativeEvent에 대해서, 사용 시 주의할 점

https://docs.unrealengine.com/5.3/ko/ufunctions-in-unreal-engine/ UFunctions게임플레이 클래스용 함수 생성 및 구현에 대한 개요입니다.docs.unrealengine.com함수 지정자 목차에 관련 내용이 있다.   함수에 UFUNCTION(BlueprintNativeEvent) 매크로를 달아주면, 함수의 기본 정의는 C++ 클래스에 구현해놓고 블루프린트에서 이를 확장, 또는 대체하는 것이 가능하다.   기본 C++ 문법의 가상함수와 비슷하다. 기본적인 구현이 되어있지만, 서브클래스에서 오버라이딩 할 수 있다.   UFUNCTION(BlueprintImplementableEvent)가 C++ 코드에서는 헤더에 함수의 선언만 해놓고, 그 구현을 블루..

[UE5] 블루아카이브 TPS게임 개발일지 (7) - Aim Offset

지난 시간에는 조준한 채로 좌우 회전 시 캐릭터도 같이 회전하는 것까지 작업했었다.  이번에는 조준한 채로 상하 회전 시 그 방향을 조준하도록 하였다.  이를 구현하기 위해서는 Aim Offset을 활용해야 한다.https://docs.unrealengine.com/5.3/ko/creating-an-aim-offset-in-unreal-engine/ 에임 오프셋 만들기에임 오프셋을 사용하여, 캐릭터가 마우스 또는 컨트롤러 방향으로 무기를 조준하도록 합니다.docs.unrealengine.com  Aim Offset과 Aim Offset 1D가 있는데, 축이 2개이냐 1개이냐의 차이이다. 현재 필요한 변수는 시점의 상/하 방향 하나 뿐이므로, Aim Offset 1D를 사용하였다.   먼저 에임 오프셋 안..

[언리얼 엔진 5] Blend Space 방향 전환이 부자연스러울 경우 확인할 것

보통 이동 방향에 따른 게걸음 애니메이션 블렌딩을 위해 Blend Space를 많이 사용하는데, 일반적으로 Calculate Direction 함수의 리턴 값을 -180 ~ 180 범위로 하여 방향을 담당하는 수평 축으로 사용한다. 이때 만약 캐릭터의 후방/좌측, 후방/우측 간의 애니메이션 전환이 부자연스럽다면, 디테일 패널의 Horizontal Axis 메뉴 아래에 있는 Wrap Input 항목을 체크해보자. 이 값이 true이어야지만 Direction 값이 사이클처럼 돌아가서 Direction의 한쪽 끝에서 한쪽 끝으로의 애니메이션 전환이 자연스럽게 된다. 만약 false라면, 값을 min / max 사이로 clamp하기 때문에 방향의 후방 좌측, 후방 우측 간의 전환 시 Direction이 -180..

[UE5] 블루아카이브 TPS게임 개발일지 (6) - TPS 애니메이션 (Layered Blend, Blend Space)

지금까지 조준 기능이 카메라 줌 인 부분만 구현되어있었다. 이번에는 조준한 채로 걸어다닐 수 있고, 카메라를 좌우로 돌리면 그 방향을 조준하도록 하였다.   먼저 조준한 채로 걸어다니는 애니메이션을 만들었다. 언리얼 엔진 마켓플레이스에는 에픽게임즈에서 만든 여러 애니메이션이 들어있고, 무료인 AnimStarterPack 에셋이 있다. 그 안에는 라이플을 조준한 채로 앞, 뒤, 좌, 우 4방향으로 걷는 애니메이션이 있다.현 캐릭터와 달리 권총이 아닌 라이플을 들고있는 애니메이션이기는 하지만, 필요한 것은 하체 애니메이션 뿐이므로 그것을 사용하기로 했다.    이제 플레이어의 이동 방향에 따라 4방향 애니메이션이 적절히 섞여서 재생되어야 한다.이를 위해 블렌드 스페이스를 이용하였다.   https://doc..

[UE5] 블루아카이브 TPS게임 개발일지 (5) - Mixamo Converter 사용, 구르기 구현

지난 포스트 마지막에서, 코드를 통해 직접 구르기의 움직임을 구현하기가 곤란했었다.  이 경우 루트 모션(Root Motion)을 사용할 수 있다. https://docs.unrealengine.com/5.3/ko/root-motion-in-unreal-engine/ 루트 모션언리얼 엔진의 루트 모션 애니메이션을 살펴봅니다.docs.unrealengine.com  루트 모션 애니메이션을 사용하면 애니메이션 데이터로 캐릭터 무브먼트를 제어하여 레벨에서 보다 사실적인 무브먼트를 연출할 수 있습니다. ← 공식 문서의 루트 모션에 대한 설명이다.   간단히 말해서, 캐릭터의 움직임이 애니메이션 자체에 의해 결정되도록 하는 것이다.  그런데 구르기 애니메이션에 루트 모션을 적용하려고 하니 문제점이 있었다.    ..

[UE5] 블루아카이브 TPS게임 개발일지 (3) - 툰 쉐이딩

원작의 느낌을 살리기 위해 툰 쉐이딩을 적용해보았다.툰 쉐이딩의 기본 원리는, 한 마디로 라이팅을 단순화하는 것이다. 유튜브에 좋은 튜토리얼이 있어 그대로 따라가보았다. https://www.youtube.com/watch?v=mzydOmgN7mc&t=1555s&pp=ygUPdWU1IHRvb24gc2hhZGVy    밑에 따로 빼둔 것은 특정 액터에만 툰 쉐이더를 적용할 수 있게 해주는 그래프 파츠인데, 본 게임에서는 모든 사물이 툰 쉐이딩 되기를 바라므로 사용하지 않는다. 포스트 프로세스 머티리얼의 내용물은 화면의 각 픽셀에 대해서 병렬처리된다는 점을 기억하고, 아래 내용을 보면 좋을 것 같다.영상의 아저씨가 한 것을 하나씩 살펴보자면, 먼저 SceneTexture를 2개 가져와서 Desaturatio..

[UE5] 블루아카이브 TPS게임 개발일지 (2) - 캐릭터 state 추가, 애니메이션 개선

캐릭터의 현재 상태를 나타내는 enum을 새로 만들었다. 우선 비무장 상태, 권총 무장 상태, 소총 무장 상태 3가지를 만들었다.  캐릭터의 state는 다른 여러 클래스에서 쓰일 경우가 많다. State만을 쓰기 위해서 KannaCharacter 전체를 include하는 것은 피하고 싶으므로, 별도의 헤더 파일에 state를 정의한다. 이후 KannaCharacter.h에 ECharacterState 타입 변수를 만들어주었다.UPROPERTY(BlueprintReadWrite, meta = (AllowPrivateAccess = "true"))ECharacterState CharacterState = ECharacterState::ECS_Unarmed; 이제 기존의 애니메이션 블루프린트를 state에 ..