블루아카이브 52

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

래그돌이 뭔가 이상한 이유는 Physics Asset이 엉망이었기 때문이다.캐릭터를 임포트한 뒤 아무것도 건드리지 않은 Physics Asset이다. 캡슐이 마구 겹쳐있고, 방향도 중구난방이며, 누락된 bone도 많은 것을 볼 수 있다.  그래서 이걸 계속 수정해보다가, 그냥 Physics Asset을 새로 만들기로 결정했다.     피직스 에셋을 새로 만든 뒤 필요없는 뼈들은 버리고, 우선 캡슐의 크기를 캐릭터에 맞게 잘 조정하였다. 그리고 관절부에 초록색, 빨간색 표시가 있는 것이 보일 것이다.이는 Constraint로, 관절이 움직일 수 있는 범위를 제한해준다.  우측의 디테일 패널에 angular를 검색해두고 작업하면 편하다. 빨간색 3d 원뿔 표시는 디테일 패널의 Swing 1,2 Limit와 ..

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

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

[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-..

[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..

[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 ..

[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를 사용하였다.   먼저 에임 오프셋 안..