언리얼 - 게임 개발 39

첫 게임 개발 (39) _ 플레이어 여러 애니메이션 추가

플레이어 애셋을 구해서 여러가지 애니메이션을 추가하였다. 위 공격, 아래 공격, 힐, 더블점프를 추가하였다.위와 아래 공격을 위해서 히트박스를 추가하였다.위 공격은 위 버튼을 누른상태에서 공격버튼을 눌러야하고 아래 공격도 아래 버튼을 누른 상태에서 공격을 눌러야한다. 이를 위하여 위와 아래 버튼을 누르고 있는 상태를 알 수 있도록 IA_UpDownValue 입력을 추가하였다.위 공격과 아래 공격 히트 박스를 공격시에만 활성화되도록 함수 2개를 추가하였다.위 공격과 아래 공격 적중시 이벤트를 추가로 만들었다. 기존의 기본공격적중시 이벤트와 거의 같다. 아래 공격에 적이 맞을 시 플레이어가 위로 튕겨오르도록 바꾸었다.더블점프시를 구분하기 위해서 플레이어 캐릭터가 공중에 있는지 체크를 Is Falling으로 ..

첫 게임 개발 (37) _ 위아래 카메라 이동 및 돈 드랍 구현

제자리에서 위아래 키를 누르면 카메라를 이동하여 보다 넓은 지형을 볼 수 있도록 구현해보고 적을 처치시 랜덤한 값을 돈을 드랍하는 것도 구현해볼 것이다. 원래 플레이어의 이동입력에 wasd 4개가 모두 할당되어 있었지만 플랫포머2D 게임 특성상 이동은 양옆으로만 이동하기 때문에 여러차례 코드를 고치다가 그냥 분리하기로 하였다. 위아래 입력을 따로 만들었고 위와 같이 카메라의 이동을 구현하였다. 먼저 캐릭터가 제자리에 있을 때만 움직이도록 하였고 위와 아래키를 누를시 AddLocal로 카메라를 특정 속도로 이동하게 하였다. 또한 상한선과 하한선을 두어서 일정 구간 이상은 이동하지 않도록 하였다. 또한 입력이 끝나고 카메라가 원래의 자리(0,0,0)이 아닐경우 1초뒤 제자리로 돌아오도록하였다.설정에서 UpD..

첫 게임 개발 (36) _ 부서지는 오브젝트 구현 및 숨겨진 장소 발견 구현

저번에 카오스 Destruction에 대해 공부하다 맞지 않는 것 같아서 방향을 틀었었다. 기존에 만들었던 Character 블프의 체력을 이용하여 플레이어가 공격하면 체력이 깎이고 0이되면 사라지도록하여 부서지는 블럭을 구현해 볼 것이다. 게임 인스턴스로 습득한 아이템을 저장하는 방법을 구현한 김에 게임에서 특정한 장소를 공격하여 벽을 부수고 숨겨진 장소를 찾는 것도 구현해볼 것이다. 이러한 장소는 한번 찾고나면 다음에 다시 맵에 왔을때 부서져 있어야 하기때문에 앞에와 마찬가지로 게임 인스턴스를 이용한 작업이 필요하다고 생각되어 이어서 작업하게 되었다.모든 부서지는 물체의 베이스가 될 BP_Destructable_Base를 만들었다. 체력이 0이되면 부서져야하기 때문에 기본적으로 체력이 있는 BP_Ac..

첫 게임 개발 (35) _ 레벨 이동시 데이터 저장과 파괴된 아이템 정보저장

레벨 이동시 체력, 에너지, 능력, 인벤토리가 초기화되는 현상을 고쳐보고 한번 습득한 아이템이나 한번 잡은 보스는 다시 등장하지 않도록 구현해볼 것이다. 먼저 원래에서의 한가지 문제가 세이브된 데이터를 불러오거나 레벨 이동을 할 때 플레이어가 스폰되면서 플레이어의 Event Begin Play가 실행되어 데이터 불러오기가 실행되었다. 단순히 레벨 이동을 할때 세이브된 정보를 불러와버려서 세이브할때 시점과 레벨 이동할때의 시점 사이의 이벤트들이 저장이 되지 않는 문제가 발생하였다. 이를 해결하기 위해서 GameInstance에 Bool 변수를 추가하여 레벨이동인지 확인하는 과정을 거쳐 Event Begin Play를 실행시 단순한 레벨 이동인지 데이터를 로드하는 것인지 구분하면 되겠다는 생각으로 작업하였고..

첫 게임 개발 (34) _ 향상된 레벨이동

예전에 게이트 블프를 만들어서 오버랩시 Open Level 함수로 다른 맵으로 이동을 구현했었다. 하지만 그 레벨에서 플레이어 스타터 위치로만 이동했었다. 여러 맵을 이동해야하기 때문에 한 맵에서도 여러 스폰 장소가 필요하다. 이러한 레벨 이동을 간단히 구현해볼 것이다. 게임 인스턴스에서 TeleportationTag를 변수로 만들었다. 게이트 블프에서 마찬가지로 LevelName과 TeleportationTag 변수 2개를 추가하고 인스턴스 편집이 가능하게 하였다. 오버랩시 게임 인스턴스의 TeleportationTag에 게이트의 TeleportationTag를 넣는다. 이후 카메라 Fade 이후 LevelName에 맞는 Open Level을 실행한다.게임모드에서 ChoosePlayerStart 함수를..

첫 게임 개발 (33) _ 체크포인트와 리스폰 구현

기존에 만들었던 체크포인트를 세이브 포인트로 바꾸고 새롭게 체크포인트를 만들것이다. 체크포인트는 세이브 포인트와 다르게 특정 부분을 지나가면 활성화되며 떨어지는 함정에서 떨어졌을때 대미지를 입고 가장 마지막에 닿았던 체크포인트에서 나타나게 된다.체크포인트 블프를 만들고 박스콜리전을 추가한다. 플레이어 블프에서 기존의 체크포인트를 세이브 포인트로 바꾸고 새롭게 LastCheckPoint 변수를 추가한다. 이는 가장 최근에 닿은 체크포인트를 저장하기 위함이다. 체크포인트 박스 콜리전 오버랩시 플레이어 블프의 LastCheckPoint변수에 자신을 저장한다. 다음으로 바닥에 떨어지는 함정에 콜리전을 만들것이다. FallDetector 블프를 만들고 체크포인트와 같이 박스 콜리전을 추가한다. 플레이어와 오버랩시..

첫 게임 개발 (32) _ 아이템 사용시 물체와 상호작용

인벤토리에 있는 아이템을 사용하여 물체와 상호작용하는 것을 구현해볼 것이다.간단히 에셋을 구해서 Door와 DoorFrame을 Static Mesh로 두었다.커스텀 이벤트를 만들어서 Door가 시간에 따라 돌아가도록 하였다. 문이 열리고 난 후를 구분하기 위해서 Is Door Opened? Bool 변수를 추가하였다. 타임라인은 위와 같이 1초로 지정하였다. 플레이어 이벤트 틱에 위와 같이 추가하였다. WoodenKey 변수를 따로 만들어서 이 변수가 BPC Inventory에 있고 Is Door Opended가 False일 경우 상호작용 위젯이 보이도록 설정하였다. 즉 인벤토리에 WoodenKey가 없으면 가까이 갔을 때 상호작용 위젯이 뜨지 않고 WoodenKey가 있어야 위젯이 표시된다.플레이어의 ..

첫 게임 개발 (31) _ 인벤토리 구현

언리얼에서 지원하는 카오스 Destruction에 대해 며칠 공부하다가 개발하는 게임에는 맞지 않는 것 같아서 쓰지 않기로 하였다. 아이템을 습득하고 얻은 아이템을 보여주는 인벤토리를 구현해 볼 것이다.열거형을 만들고 위와같이 3가지 아이템 타입의 이름을 정한다.구조체 S_Slot을 만들고 3가지 변수를 만든다.구조체 S_Item을 만들고 위와 같이 변수를 추가하였다.구조체 S_AllItem을 만들고 위와 같이 변수를 추가하였다. S_Slot 배열형식으로 저장하여 S_AllItem은 플레이어가 가지는 아이템 목록이 될 것이다. 좀 복잡한데 정리하면 S_AllItem가 제일 상위로서 플레이어가 소지한 전체 인벤토리 아이템이다. S_AllItem은 각각 S_Slot 배열형식으로 변수를 가지게 되므로 Obje..

첫 게임 개발 (30) _ 숨겨진 장소 만들기

플랫포머 게임에 자주 나오는 숨겨진 장소를 간단히 구현해볼 것이다. 이를 위해 먼저 캐릭터가 들어가면 투명하게 보이는 머티리얼을 구현해야한다. 콜리전에서 Wall 커스텀 콜리전을 추가한다. 다음으로 이 Wall 콜리전을 감지하는 Trace함수를 만든다. 카메라와 캐릭서 사이의 Sphere Trace로 Wall을 감지하면 TraceWall 변수에 넣고 머티리얼의 값을 조정하는 함수이다. 머티리얼은 위와 같이 Mask와 TransStrength를 파라미터로 조절할 수 있도록 하였다. 인스턴스 머티리얼을 만들고 값을 조절한다. 값에 따라 캐릭터 주변의 투명해지는 정도를 조절할 수 있다. 숨길 장소크기만큼의 박스를 두고 머티리얼을 입힌다. 배경을 검은색으로 하였고 숨겨진 장소에 들어갔을 때 장소를 인지할 수 있..