-
[언리얼 블루프린트] SuperHotUnreal Engine Blueprint/블루프린트를 이용한 게임 만들기 2019. 11. 18. 15:42
오늘은 여태까지 설명한 기능을 이용하여 간단한 게임을 만들어 볼려고 합니다. 여태까지 설명한 기능으로는 AI[Patrol], SlowTime, 포스트 프로세스, 레벨 블루프린트 등이 있는데 이 기능들을 다 사용하지 않을수도 있습니다. 그리고 게임을 만들면서 추가적인 기능을 더 설명하겠습니다. 우선 "SuperHot" 이라는 게임을 알고 계신가요? 저번에 설명을 했지만 모르시는 분들은 동영상을 봐주세요.
링크 : https://www.youtube.com/watch?v=IRtMkqIjM30
이러한 게임을 오늘 할 내용만큼 간단하게 미리 만들어봤습니다. 아래의 동영상을 봐주세요.
링크 : https://www.youtube.com/watch?v=EJccnGvNMQQ&feature=youtu.be
이 "SuperHot" 이란 게임은 정말 간단한 룰을 가지고 있습니다. 플레이어가 움직이지 않으면 시간이 멈추고 움직이면 시간이 흐르며, 플레이어가 죽지 않고 모든 적을 죽이면 다음 레벨로 이동하는 게임입니다. 룰은 간단해서 만들기는 쉽지만 만들 시간이 부족하고 리소스 또한 부족하기 때문에 완성된 결과물이 "SuperHot" 이 아니라 최대한 비슷한 결과물을 만들려고 노력하겠습니다. 그리고 마지막에 프로젝트도 공유 하겠습니다.
먼저 해야할 일은 슈퍼 핫에서 나오는 적 캐릭터를 만드는 것 입니다. 영상에서 본 것 처럼 매우 시원하게 부숴지는 캐릭터를 만들어야 하는데 시간과 리소스가 부족한 관계로 큐브를 이용해 만들어 보겠습니다. 먼저 부숴지는 오브젝트가 되는 Destructible Mesh를 사용하겠습니다. 설명은 위 링크에서 확인을 해주세요.
Destructible meshes - Unreal Engine Game Development Blueprints
A destructible mesh, as the name suggests and different from a simple destroy object node, is a mesh that can be divided into smaller pieces and each piece is
subscription.packtpub.com
링크 : https://www.youtube.com/watch?v=-gGiEmYj4oE&list=PLZlv_N0_O1gYeJX3xX44yzOb7_kTS7FPM&index=1
이 Destructible Mesh 사용하기 위해서는 플러그인을 추가해야 합니다. 기본적인 플러그인 이지만 활성화가 안돼있으니 활성화를 시켜줍시다. 프로젝트 상단에 보면 세팅이 있습니다. 세팅을 누르셔고 플러그인까지 눌러주세요. 그런 다음에
상단에 위치한 "내장 플러그인" 검색 창에서 Destructible를 검색합니다. 검색을 하면 "Apex Destruction" 이 보이는데 이걸 활성화를 시켜줍니다. 활성화를 시키면 프로젝트를 재시작 하라고 나오는데 재시작을 하면 이제 이 프로젝트는 Destructible Mesh를 사용할 수 있습니다. 그리고 실제 Destructible Mesh를 만드는 방법은 위 링크에서 볼 수 있는 것 처럼 스태틱 메시를 우클릭 해서 디스트럭터블 메시 생성으로 생성을 할 수 있습니다. 저희가 만들려고 하는 적은 큐브를 사용한다고 했으니 StarterContent/Shapes/ 에 있는 "Shape_Cube" 로 디스트럭터블 메시를 만들어 봅시다. [프로젝트를 생성 할 때 시작 콘텐츠를 포함했다면 이 폴더랑 파일이 있습니다. 보통은 포함이 돼있으니 걱정 안하셔도 됩니다.] 생성한 디스트럭터블 메시를 열어서 세팅을 바꿔야합니다.
이렇게 세팅을 해주시면 됩니다. 설명은 마우스 커서를 가져가면 설명이 돼있지만 간단하게 말하면
Damage Threshold - 부숴질 데미지 즉 이 이상 데미지를 받으면 부숴진다.
Damage Spread - 주어진 데미지 * Damage Spread 즉 데미지 배수
Enable Impact Damage - 이 물체가 물리적인 반응이 일어났을 때 데미지를 받게 함
Impact Damage - 얼마 만큼의 데미지를 받게 할 건지
Debirs LifeTime - 파괴 했을 때 파괴 된 물체가 남아있는 시간
Debirs Timeout - 이 물체가 파괴 됐을 때 설정한 시간에 따라 파괴 된 물체를 삭제 시킴 [체크를 안하면 계속 남아있음]
Enable Debirs - 설정한 Debirs를 사용함
Debirs Depth - 파괴 된 물체의 깊이가 설정한 값이 되면 설정한 시간에 따라 물체를 삭제 시킨다.
즉 "이 물체의 최대 Hp를 100으로 주고 받는 데미지는 배수는 1 최소1~최대3의 시간에 따라 물체의 깊이가 1이 되면 사라진다" 라는 뜻 입니다. 이렇게 적으로 사용될 디스트럭터블 메시의 설정이 끝났습니다. 그 다음은 이 적 캐릭터를 만들어야 합니다. 블루프린트 클래스를 캐릭터로 생성을 해주세요. 그 다음에 생성한 블루프린트를 열고 컴포넌트 추가를
디스트럭터블로 하나 생성해 줍니다. 생성한 컴포넌트의 이름을 "Mob" 라고 한 뒤 오른쪽 설정에 있는 Destructible Component 에 저희가 만든 디스트럭터블 메시를 넣어주세요. 머티리얼은 Superhot과 비슷하기 위해 빨간색 머티리얼을 사용하겠습니다. 그 다음에는 이 메시의 Z Location을 - 80으로 낮춰줍니다. [캡슐 콜리전이 실제 캐릭터의 콜리전으로 사용되기 때문에 z 위치를 낮춰 땅바닥 닿아 움직이는 것 처럼 보이게 하기 위해서 입니다.] 그 다음에는 실제 이 적이 해야할 내용인 이벤트를 만들어야 합니다. 하지만 간단합니다. 적이 해야하는 일은 플레이어게 총을 쏘거나 다가가는 일 뿐입니다. 하지만 오늘은 총을 쏘지 않으니 다가가는 일만 하면 됩니다. 다가가는 일은 "AI Move to" 이벤트로 간단하게 만들 수 있습니다. 추가로 디스트럭터블 메시가 파괴 됐을 때 이 물체의 콜리전을 꺼주는 작업도 해줘야 물체가 파괴 됐지만 그 자리를 이동하려 할 때 막힘 없이 이동을 할 수 있습니다. "AI Move to" 는 커스텀 이벤트를 생성해서 만들겠습니다.
커스텀 이벤트를 생성해 이벤트의 이름을 "GoPlayer" 라고 만들어 줍니다. 또 디스트럭터블 메시가 파괴 됐을 때 발생하는 이벤트로 On Component Fracture 이벤트가 있으니 이벤트 호출하여 실제 캐릭터의 콜리전을 담당하는 Capsule Component 의 콜리전을 꺼줍니다. 이렇게 적 캐릭터가 완성이 됐습니다. 이제 이 적 캐릭터를 생성하는 역활을 하는 블루프린트를 만들겠습니다. 블루프린트 클래스 Actor로 생성을 해준 뒤 Root Component를 스태틱 메시로 바꿔줍니다.
그리고 이 적 캐릭터를 생성하는 이벤트를 커스텀 이벤트로 만들겠습니다.
적 캐릭터를 생성하는 이벤트 시작 이벤트로 적 캐릭터를 생성하는 이벤트를 호출합니다. 그리고 호출하는 이벤트의 내용은 아까 만들어 둔 캐릭터를 이 블루프린트의 위치 즉 레벨에 배치 된 이 액터의 위치에서 스폰한다 라는 내용입니다. 그 다음은 적 캐릭터를 생성은 했지만 실제 움직이는 이벤트를 가진 GoPlayer 이벤트를 호출해줍니다. 그리고 딜레이를 통해 이 이벤트를 반복합니다. 적 캐릭터 생성 -> 적 캐릭터가 플레이어를 쫓는 이벤트 호출 -> 딜레이를 통한 반복 으로 이뤄집니다. 이제 이 블루프린트를 레벨에 배치한다면 적 캐릭터를 생성한 뒤 플레이러를 쫓는 이벤트까지 하는 일을 하게 됩니다.
이제 적 캐릭터는 끝났으니 플레이어에 이벤트를 추가해야합니다. 프로젝트를 1인칭으로 생성을 했다면 움직이면 시간이 흐르고 멈추면 시간도 멈추는 기능을 하는 이벤트만 추가하면 됩니다. 1인칭 플레이어 블루프린트를 열고 코멘트로 처리 된 "Movement Input" 을 찾아줍니다. 이 부분이 실제 플레이어가 wsad를 눌러서 이동할 때 발생하는 이벤트들이 있습니다. MoveForward 입력 축은 입력이 없으면 0 W는 1 S는 -1의 값을 리턴하는 이벤트고 MoveRight도 입력이 없으면 0 D는 1 A는 -1의 값을 리턴하는 이벤트 입니다. 이 설명만 보면 0일 때는 입력이 없으니 이 때는 시간을 멈추고 0이 아닐 때는 시간이 흐르게 만들면 됩니다. 하지만 둘중 하나만 입력이 들어올 때도 움직여야 하니 2개의 Bool 변수를 추가합니다.
빨간색 부분은 기존에 있던 내용에서 제가 추가한 부분입니다. "SuperHot" 은 실제 시간을 멈추고 원래대로 돌리는 내용이 담긴 커스텀 이벤트 입니다. 우선 Forward나 Right가 0일 때 만들어 준 2개의 Bool 값을 True로 만듭니다. True일 때는 "SuperHot" 이벤트에서 시간을 멈추는 용도로 사용이 되는 겁니다.
이제 실제 시간을 멈추거나 돌리는 내용이 담긴 "SuperHot" 이벤트 입니다. 설명하기 전에 우선 왜 Right 조건을 먼저 사용했냐고 크게 의미는 없습니다 Forward 먼저 하셔도 됩니다. 이렇게 해주면 앞, 뒤 또는 왼쪽, 오른쪽을 눌렀을 때 아니면 전부 눌렀을 때는 시간이 평범하게 흘러가고 누르지 않았을 때는 멈춰있게 됩니다.
이제 마지막으로 캐릭터에게 발사하는 탄환을 만들어 보겠습니다.FirstPersonBP/Blueprints에 FirstPersonProjectile을 복사한 블루프린트를 하나 만듭니다. 이름은 BP_PlayerProjectile라고 하고 열고나서 Sphere에 머티리얼을 다르게 해줍니다.[적과 플레이어가 쏘는 총알이 다르다는 걸 확인하기 위해] 그 다음에 CollisionComponent에 있는 오른쪽 디테일에서 Collision 옵션을 찾고 Simulation Generates Hit Event 옵션을 켜줍니다. 그러면 이제 이 콜리전에 대한 Hit 이벤트가 발생하게 됩니다.
위 사진 처럼 Hit 이벤트를 만들어 주세요. 위 노드에 대한 설명은 Hit 이벤트가 발생 했을시 부딪힌 오브젝트의 클래스가 적 캐릭터인지 먼저 확인을 합니다. 확인한 뒤 맞으면 적 캐릭터의 디스트럭터블 메시에 데미지를 주고 자기 자신[총알]을 삭제 시킵니다. 만약 적 캐릭터가 아니라면 부딪힌 방향에 힘과 데미지를 가하고 자기 자신을 삭제 시킵니다. 마지막으로 왼쪽 상단에 있는 Projectile을 누르시고 오른쪽 디테일에 있는 Projectile에 속도를 취향에 맞게 조정하고 중력 설정도 조정하시면 됩니다. 이렇게 총알에 대한 설정도 끝났다면 플레이어 캐릭터 블루프린트인 FirstPersonCharacter에서 Fire입력 액션에 있는 SpawnActor에 있는 클래스를 BP_PlayerProjecetile로 바꿔주세요. 이제 플레이어가 총을 쏘면 만들어 뒀던 빨간색 총알이 나가게 됩니다. 이제 배치를 해주면 처음 보여준 영상과 같은 모습을 볼 수 있습니다. 다음 시간에는 이제 적 캐릭터가 총을 쏘고 그 총알에 맞으면 죽는 것 까지 해보도록 하겠습니다.
'Unreal Engine Blueprint > 블루프린트를 이용한 게임 만들기' 카테고리의 다른 글
[언리얼 블루프린트]Super Hot2 (0) 2019.11.25 [언리얼 블루프린트]레벨 블루프린트의 사용 방법 (0) 2019.11.04 [언리얼 블루프린트]포스트 프로세스 사용하기 (1) 2019.09.23 [언리얼 블루프린트]Slow Time 만들기 (0) 2019.09.16 [언리얼 블루프린트]누구나 할 수 있는 게임 만들기 (0) 2019.09.09