Make Unreal REAL.
article thumbnail
데미지 프레임워크

이득우의 언리얼 C++ 게임 개발의 정석 많은 것을 직접 만들어 써야 하는 유니티와 달리 언리얼 엔진은 데미지 프레임워크조차 제공한다. AActor 클래스에 TakeDamage()라는 함수가 구현되어 있고 오버라이드하여 사용할 수 있다. 인자는 다음과 같다. DamageAmount 데미지량 DamageEvent 데미지 종류 EventInstigator 공격을 한 가해자이다. 폰은 공격에 사용한 도구일 뿐 실제 가해자는 플레이어 컨트롤러이다. DamageCauser 데미지를 입힌 도구이다. 플레이어 컨트롤러라는 가해자가 폰이라는 도구를 이용해 데미지를 입혔다. 데미지를 입는 코드에서는 공격을 받을 경우 죽는 애니메이션을 재생하고 Collision을 비활성화한다. 캐릭터 클래스의 Can be Damged를 ..

article thumbnail
디버그 드로잉

이득우의 언리얼 C++ 게임 개발의 정석 타격 판정 등을 할 때 항상 로그 창을 볼 수는 없는 노릇이니 언리얼 엔진은 디버그 드로잉 기능을 제공한다. 디버그 드로잉 선, 점, 화살표, 박스, 구, 캡슐, 실린더, 콘 등의 도형을 월드에 그려 디버깅하는 기능이다. 공격 판정 여부를 캡슐을 그려 디버깅 해보도록 한다. DrawDebugHelpers.h 헤더를 포함해야 한다. 액터의 앞 방향으로 절반의 길이가 AttackRadius + AttackRange * 0.5인 캡슐을 그린다. 그린 걸 유지하지 않고 5초 동안 그리며 성공 시 초록색, 실패 시 빨간색으로 그려진다. 저번에는 앞 방향을 구하기 위해 FRotationMatrix::MakeFromX(vec) 함수를 사용했는데 이번에는 MakeFromZ(ve..

article thumbnail
콜리전과 공격 판정

이득우의 언리얼 C++ 게임 개발의 정석 언리얼에서 콜리전은 크게 세 가지 방법으로 제작할 수 있다. Static Mesh 에셋 Static Mesh 에셋에 콜리전을 심으면 Static Mesh 컴포넌트에서 비주얼과 충돌을 모두 관리할 수 있어 간편하다. 기본 도형(Primitive) 컴포넌트 구, 박스, 캡슐 등의 기본 도형을 사용해 충돌을 처리한다. Static Mesh의 모양에 관계 없이 충돌 영역을 설정한다. 보통 Skeletal Mesh를 움직일 때 주로 사용한다. 피직스(Physics) 에셋 캐릭터의 각 관절이 흐느적거리는 래그돌(RagDoll)을 구현할 때 사용한다. 캐릭터의 각 부위에 기본 도형으로 충돌 영역을 설정하고 이를 연결해 구현한다. 피직스 에셋은 Skeletal Mesh에만 사용..

article thumbnail
콤보 공격 구현

이득우의 언리얼 C++ 게임 개발의 정석 기존에 Attack1에 들어있던 애니메이션은 4개의 공격을 하나의 몽타주로 연결하기 위해 각 길이를 단축시킨 애니메이션이다. 모두 지우고 다시 드래그해 배치한다. 각 애니메이션의 시작점에 Section을 설정한다. 섹션을 추가하면 각 섹션이 연결되어 재생되는데 Link를 끊어 각각을 독립적인 섹션으로 만든다. 각 섹션의 AttackHitCheck 노티파이는 나중에 타격 판정을 위해 사용되고 NextAttackCheck는 콤보 연계 판정을 위해 사용된다. 콤보 연계의 경우 현재 섹션의 공격이 시작된 이후부터 NextAttackCheck 노티파이 전까지 공격 키가 눌렸으면 연계가 가능하게 된다. 해당 프레임에 즉각적인 반응을 요구하는 콤보 공격 등을 구현할 때는 Mo..

article thumbnail
애니메이션 노티파이

이득우의 언리얼 C++ 게임 개발의 정석 애니메이션 노티파이(Animation Notify) 애니메이션 혹은 몽타주 재생 중 특정 타이밍에 애님 인스턴스에게 신호를 보내는 기능이다. 아래에서는 Attack2 섹션에서 공격 모션이 끝나고 기본 자세로 돌아갈 때 NextAttackCheck라는 노티파이를 발생시키도록 했다. 해당 프레임에 즉각적인 반응을 요구하는 콤보 공격 등을 구현할 때는 Montage Tick Type을 Branching Point로 설정하는 것이 좋다. 몽타주 섹션이나 재생 위치를 변경할 때 적합하다. 노티파이 옆에 USB 아이콘 모양이 있으면 Branching Point 방식이다. 기본값인 Queued는 비동기 방식으로 신호를 받아 적절한 타이밍에 신호를 놓치게 될 수 있다. 타이밍에..

article thumbnail
델리게이트(Delegate)

이득우의 언리얼 C++ 게임 개발의 정석 앞에서는 애니메이션 몽타주의 Montage_IsPlaying() 함수를 이용해 공격 모션 중인지 확인했다. 이번에는 델리게이트를 활용하여 게임 로직과 애니메이션의 처리를 분리해 더 효과적으로 공격 기능을 구현해보겠다. 델리게이트 특정 객체가 해야 할 로직을 다른 객체가 대신 처리할 수 있도록 하는 보편적인 설계의 개념이다. A 객체가 B 객체에 명령을 내릴 때, B 객체에 자신을 등록하고 B의 작업이 끝나면 A에게 다시 알린다. 언리얼에서는 C++에서만 사용할 수 있는 델리게이트와 C++과 BP에서 사용할 수 있는 델리게이트 두 종류가 있다. BP 오브젝트에는 멤버 함수에 대한 정보를 저장하고 로딩하는 직렬화(Serialization) 매커니즘이 들어있기 때문에 ..

검색 태그