언리얼 엔진5 45

[UE5] 블루아카이브 TPS게임 개발일지 (15) - 적 사망 연출

적에게 데미지를 주는 기능을 만들었으니, 체력이 0이 되면 죽게 하도록 할 것이다. 사망 애니메이션을 따로 준비하지 않고, 래그돌(Ragdoll) 효과를 사용할 것이다.혹시 래그돌이라는 단어가 익숙치 않다면, 캐릭터가 힘빠진 듯이 흐느적거리면서 죽는 그것이라고 생각하면 된다.  작업에 앞서, 래그돌을 적용할 캐릭터의 스켈레탈 메시가 Physics Asset을 가지고 있는지 확인해주어야 한다.스켈레탈 메시를 정상적으로 임포트했다면 자동으로 추가되어있을 것이다. 상단 우측의 Simulate 버튼을 눌러 래그돌을 바로 시험해볼 수도 있다.    우선 Enemy 클래스가 소유하고 있는 Attribute 클래스에 IsDead 함수를 추가하였다. 말 그대로 죽었는지 알려주는 함수이다.FORCEINLINE bool ..

[언리얼 엔진 5] 라이브 코딩 내용이 적용이 안될 때

언리얼 엔진5로 개발을 하다보면 종종 라이브 코딩을 통해 컴파일을 해도 변경사항이 적용이 안될 때가 있다.또한 라이브 코딩으로 컴파일을 해도 엔진을 껐다가 켜면, 변경사항이 적용이 되어있지 않다.  라이브 코딩은 간단한 변경사항을 빠르게 확인하기 위한 것으로, 편리하긴 하지만 다소 불안정한 기능이다. 확실한 컴파일을 위해서는 에디터를 닫고 비주얼 스튜디오에서 컴파일하는 것이 좋다.  변경사항이 적용되지 않을 때 외에도 다수의 클래스를 수정하였을 때, 엔진의 런타임 중 컴파일을 하면 문제가 될 수 있는 부분(애니메이션 블루프린트의 부모 C++ 클래스 등)을 수정했을 시엔 에디터를 닫고 컴파일 해주는 것이 좋다.  비주얼 스튜디오에서 Ctrl + f5(디버그하지 않고 시작)를 누르면 자동으로 컴파일 후 엔진..

[UE5] 블루아카이브 TPS게임 개발일지 (14) - 데미지 판정 구현

언리얼 엔진의 Actor 클래스에는 데미지를 받는 함수가 기본적으로 정의되어있다. https://docs.unrealengine.com/5.3/en-US/API/Runtime/Engine/GameFramework/AActor/TakeDamage/ AActor::TakeDamageApply damage to this actor.docs.unrealengine.com 그 시그니쳐는 이러하다.virtual float TakeDamage( float DamageAmount, struct FDamageEvent const & DamageEvent, class AController * EventInstigator, AActor * DamageCauser) 액터가 데미지를 받게 하고자 한다면, ..

[UE5] 블루아카이브 TPS게임 개발일지 (13) - HP 시스템 제작 + SRP

앞서 라인트레이싱으로 적을 맞추는 것을 구현했으므로, 이제 적이 데미지를 받게 할 차례이다.이에 앞서 소개하고 싶은 소프트웨어 디자인 원칙이 있는데, SRP(Single Responsibility Principle)이다.즉 단일 책임 원칙으로, 한 클래스는 한 가지 책임만 갖게 하도록 하는 것이다. (역할의 분리) 적의 HP에 대한 정보는 물론 적의 성분이므로, Enemy.h에 정의하는게 맞을 수도 있다.하지만 이후에 프로젝트가 점차 커지게되면, Enemy 클래스는 공격, 행동, HP를 비롯한 스탯 등 많은 여러가지 역할을 맡게될 수 있다.  이렇게 한 클래스가 지나치게 많은 역할, 즉 책임을 맡을 경우 추후 유지보수가 어려워질 수 있다.    따라서 스탯 관련 데이터는 별도의 클래스에 구분하도록 하였다..

[UE5] 블루아카이브 TPS게임 개발일지 (12) - 크로스헤어 제작

이어서 조준선을 제작할 것이다. 언리얼 엔진에서 UI를 만들기 위한 도구는 UMG이다.https://docs.unrealengine.com/5.3/ko/umg-ui-designer-quick-start-guide-in-unreal-engine/ UMG UI 디자이너 퀵스타트 가이드언리얼 모션 그래픽 사용을 시작합니다.docs.unrealengine.com   UMG를 화면에서 사용하기 위해서는 우선 블루프린트를 만들어야 한다.      좌측 Palette 패널에서 필요한 UI들을 좌측 하단 Hierarchy 혹은 비주얼 디자이너(가운데 큰 화면)으로 가져올 수 있다.  화면 구성에 대해서는 여기를 참고하자.https://docs.unrealengine.com/5.3/ko/widget-blueprints-..

[언리얼 엔진 5] 프로젝트에 모듈을 추가하는 방법

언리얼 엔진 5의 일부 클래스들은 사용에 앞서 모듈을 추가해주어야 한다.  예를 들어, UWidget은 언리얼 엔진에서 사용할 수 있는 UI를 지원해주는 클래스이다.https://docs.unrealengine.com/5.2/en-US/API/Runtime/UMG/Components/UWidget/ UWidgetThis is the base class for all wrapped Slate controls that are exposed to UObjects.docs.unrealengine.com위의 문서를 보면, References 목차에 Module이 UMG라고 적혀있는 것을 볼 수 있다.이는 UWidget을 사용하기 위해서는 UMG 모듈을 프로젝트에 추가해야 한다는 것을 의미한다.   모듈을 프로젝트..

[UE5] 블루아카이브 TPS게임 개발일지 (11) - 라인 트레이싱

이제 사격 시 라인 트레이싱을 통해 명중 여부를 판별하는 코드를 작성할 것이다. 일반적인 생각으로는 탄환이 총구에서 나가는 것이 맞지만, 게임 로직의 면에서는 조금 다르다. 탄환은 카메라 시점을 기준으로 앞으로 쭉 뻗어나가야 한다. TPS 게임이든, FPS 게임이든 총구의 방향은 정면이 아닌, 살짝 기울어진 경우가 대부분이다.따라서 라인트레이싱을 총구의 방향 그대로 하면 화면 정중앙에 적을 맞추고 쏴도 맞지 않는 불합리한 경우가 생긴다. 따라서 라인트레이싱의 시작점을 카메라의 위치(TPS게임이므로 살짝 더 앞)으로,종료점을 시작점 + 카메라의 정면 벡터 * 사거리로 할 예정이다. 이어서 코드를 살펴보도록 하자. void AKannaCharacter::Fire() // 여기서는 상태 전환, 애니메이션만 재..

[UE5] 블루아카이브 TPS게임 개발일지 (10) - 사격 기능 구현 준비 작업 + DIP

사격 애니메이션까지는 만들어 두었으므로, 실제로 총이 발사되는 메커니즘을 만들고자 한다. 우선 발사를 구현하는 데에는 두가지 방법이 있다. 라인 트레이싱(Line Tracing)과 투사체(Projectile)이다. 오버워치를 해본 사람은 히트스캔과 투사체라는 용어가 익숙할 것이다.투사체는 여기서의 투사체와 같고, 언리얼 엔진에서 히트스캔을 구현하는 방법이 라인 트레이싱이라고 할 수 있다. 언리얼의 라인 트레이싱은 유니티의 레이캐스팅(RayCast)과 동일하다. 본 프로젝트에서는 칸나의 일반 사격은 라인 트레이싱으로, EX스킬은 투사체로, 적의 사격은 투사체로 구현할 생각이다.아무래도 적의 공격을 받을 땐 실제로 총알이 날아오는게 보여야 게임이 더 재밌을 것 같기 때문이다. 물론 바로 이것부터 작업할 것은..

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

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

[언리얼 엔진 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를 사..