언리얼 - 게임 개발 39

첫 게임 개발(9) _ Inventory _ 돈 구현하기

간단히 돈을 구현하는 작업을 해 볼 것이다. 미리 구한 5가지 색의 돈 에셋을 임포트한다. BP_Money 블루프린트를 만들고 컴포넌트를 추가하여 MoneySM로 이름붙인다. 구조체 블루프린트를 만들어 Name, Amount, Mesh 3가지를 추가한다. 컴포짓 데이터 테이블을 만들고 열 5개를 추가하여 이름과 Name에 순서대로 Green, Blue, Red, Silver, Gold로 이름붙이고 Amount를 각가 1, 5, 10, 50, 100으로 설정한다. 이는 돈의 색에 따른 가치가 된다. Construction Script에서 변수로 Money를 추가하고 변수 유형을 데이터 테이블 열 핸들로 설정한다. 위와 같이 구조체 핀 분할로 Row Name에 Get Data Table Row Dt_Mone..

첫 게임 개발(8) _ 적과 오버랩시 데미지

적과 닿았을 때 데미지를 입는 것을 구현하지 않아서 간단히 작업하려고 했는데 생각외의 문제로 해결하는데 좀 시간이 걸렸다. BP_Enemy_Base에 캡슐 컴포넌트와 오버랩시 이벤트를 만들고 BP_Player일 경우 데미지를 적용하는 것으로 해결하려고 했다. 또한 뒤에는 Report Damage Event를 추가하여 적이 공격받은 것을 인지하게 하였다. 적과 닿았을 때 데미지를 입어 잘 적용되는 줄 알았으나 공격시 히트박스가 활성화되며 플레이어도 데미지를 입는 상황이 발생하였다. 이를 해결하려고 이리저리 고민하며 방법을 찾았다.  위에서 추가로 Other Comp노드와 BP_Player의 캡슐 컴포넌트가 일치하는 여부를 확인하는 분기점을 추가하여 같을 때에만 플에이어가 데미지를 입게 하였다. 잘 적용된 ..

첫 게임 개발 (7) _ 플레이어의 공격 적 AI에 전달하기

적이 공격을 당해도 감지(시야, 소리, 데미지) 되지 않으면 공격하지 않고 그대로 순찰루트를 도는 것을 공격 받을 때도 공격상태로 돌입하도록 바꾸고 적이 죽은 뒤 일정 시간 후 사라지도록 구현을 해 볼 것이다. AIC에 적이 Defeated 되었을 때 만든 이벤트 디스패처를 바인드하여 블랙보드에 State를 Dead로 할당시킨다. BTT_Destroy Task를 만들어 액터를 파괴하는 일을 할당한다. 블랙보드 조건을 달고 State가 Dead가 되었을 때 5초가 기다린 뒤 Destroy Task를 불러 액터를 파괴한다. 적이 공격받았음을 전달하는 과정에서 좀 헤맸는데 지난번에 플레이어의 X키에 적에게 데미지를 주기위해서 Report Damage Event를 사용하였음을 생각하고 이를 이용하여 해결 할 수..

첫 게임 개발 (6) _ 적 AI 인지 시스템 구현

적이 단순히 쫓아오는 AI를 구현해봤고 이번에는 적이 일정 범위 안에서 보기, 듣기, 데미지로 플레이어를 인지하고 반응하는 AI를 구현할 것이다.AIC에서 AIPerception 컴포넌트를 추가한다. 디테일에서 감지 환결성정배열을 추가하여 시야, 듣기, 데미지 3개를 선택하고 각 범위를 조정한다. AI 디버깅 모드에서 보는 적 AI 인지의 범위이다. 노랑색이 듣기, 초록색이 시야, 빨강이 데미지이다. 저 범위에서 상호작용할 시 적이 인지한다. Enum을 추가하여 위와 같이 None, Sight, Hearing, Damage를 만든다. AIC_Controller에서 CanSenseActor 함수를 만든다. AIPerception에서 감지한 인지들을 Select로 구분하여 위에서 만든 배열값과 비교하여 구분..

첫 게임 개발 (5) _ 적 공격 AI구현

적이 나를 쫒아와서 공격을 하는 기본적인 AI를 구현해보려고 한다. 오른쪽은 기존의 순찰루트 AI이고 왼쪽은 플레이어를 쫓아와 공격하는 AI 경로이다. BP_Player에 숫자 1를 누르면 AIContorller를 가져와 Attack과 Passive상태를 조정할 수 있도록 간단한 코드를 만든다. Enemy에는 Attack 이벤트를 추가하여 공격 애니메이션을 동작하도록 한다. 기본적으로 순찰을 하다 1를 누르면 플레이어를 공격하고 다시 1을 누르면 순찰로 돌아가는 모습을 볼 수 있다. 문제는 위와 같이 적이 휘두를 때 플레이어가 지나쳐가면 적도 휘두르는 모션 그대로 돌아 플레이어를 타격하는 것을 볼 수 있다. 이를 해결하기 위해서 기존의 Attack이벤트에서 AIController를 가져와 ClearFou..

첫 게임 개발 (4) _ 적 이동경로 AI구현

이번에는 적의 죽는 애니메이션과 간단한 순찰 루트를 이동하는 AI를 구현할 것이다. 액터 블루프린트를 하나 만들고 스플라인 컴포넌트를 추가한 후 이름을 PatrolRoute로 바꾸어준다.위와 같이 PatrolIndex와 Direction인티저 변수를 추가하고 코드를 짠다. Direction 변수는 -1 또는 1만 존재하고 PatrolIndex를 0부터 최대치까지 1씩 증가시키고 Get Number Of Spline Points함수로 맵의 최대 개수를 구해 Index가 최대치에 도달하면 Direction변수를 -1로바꾸어 다시 0까지 순차적으로 감소시키는 그래프이다. 이는 순차적으로 점을 따라 이동하기 위한 경로를 만들기 위함이다.  맵에 위와 같이 경로를 구성한다.  Behavior Tree에서 Task..

첫 게임 개발 (3) _ 넉백 및 패배시 애니메이션 구현

맞았을 때 반짝임과 무적시간을 할당하기 위해서 BP_Player에 TriggerInvincibility함수를 만들고  위와 같이 콜리전을 일시적으로 Ignore로 바꾸어 무적을 구현한다. BP_ActionChar_Base에 넉백을 구현하였다. 길어서 노드로 접었으며 내용은 아래와 같다. 때리는 대상과 맞는 대상의 위치를 구해 Find Look at Rotation함수를 통해 방향벡터를 구하고 Launch Character함수로 밀어내어 넉백을 구현한다. 수평으로 미는 힘과 수직으로 미는 힘을 변수로 할당하여 각 Pawn마다 다른 변수를 입력할 수 있도록 하였다.  Stun구현을 위하여 StateMachine에 Jump선을 만들어 Stun상태를 만들었다.  Stun에서 Idle로 이동하는 조건은 위와 같이..

첫 게임 개발 (2) _ 공격 애니메이션 및 타격시 효과 구현

이번에는 적을 공격하면 적이 맞는 효과로 빛나게 설정하고 체력이 0이되면 적이 파괴되도록 구현할 것이다.  공격할 때 검을 휘두를때만 적을 타격할 수 있도록 NotifyState (ZD) 블루프린트를 만들어 위와같이 시작할때 Set Active를 True로하고 끝나면 Set Active를 false로 바꾸도록 한다.  Animation Source에서 위와 같이 검을 휘두르는 5,6 프레임에만 히트박스가 적용될 수 있도록 NotifyStates를 할당한다.  검 크기에 맞는 히트박스를 만들고 BP_Enemy_Base 액터와 만났을 때 데미지를 적용하는 함수를 실행한다.  BP_ActionChar_Base에서 Event AnyDamage를 불러와 패배하지 않았을때 BPC Vitality의 Receive D..

첫 게임 개발 (1) _ 플레이어 이동 및 애니메이션 구현

게임개발을 해보고 싶어 언리얼 엔진 튜토리얼부터 보기 시작한지 2달이 좀 넘었다.그 중 언리얼 엔진에서 제공하는 paper 2d 기능을 알게 되었고 2d / 3d 하이브리드 게임에 흥미가 가서 메트로배니아류의 게임 제작을 기획하게 되었다.기본으로 제공하는 paper 2d 기능이 충분하지 않아 paperzd 라는 플러그인을 발견하였고 이 플러그인을 이용하면 2d statemachine을 이용한 애니메이션 구현이 쉬워 이 플러그인을 사용할 생각이다.  전체 Pawn의 부모 블프인 BP_ActionChar_Base를 만들고 자손 블프를 BP_Player와 BP_Enemy_Base로 만든다.이후 적들은 BP_Enemy_Base의 자손 블프로 구현할 생각이다. BP_ActionChar_Base에는 모든 Pawn에..