언리얼 - 게임 개발 39

첫 게임 개발(19) _ 적의 랜덤 연속 투사체 공격 구현

적의 강공격 이후 Spawn을 하여 투사체를 소환하는 식으로 공격을 구현했었었다.이로인해 강공격 애니메이션이 끝나고나서 투사체가 스폰되어 약간 어색함이 있었다.이를 해결하기 위해 ANS를 이용하여 애니메이션 중간에 투사체가 소환되도록 할 것이다.또한 적의 연속 투사체 공격을 구현해 볼 것이다. 위와 같이 내려찍는 모션이 나오는 프레임에 ANS를 할당한다. 적 블프에 있던 Spawn 노드들을 떼어다가 할당된 ANS에 할당한다.이로써 애니메이션 중간 프레임에 투사체가 소환된다. 다음으로 적의 연속 투사체 구현을 위한 ANS를 만든다.위와 같이 모든 프레임에 걸쳐서 ANS를 만든다. 적의 머리 위에 FlipBook을 위치시키고 커다란 구름모양의 플립북을 할당한다.평소에는 보이지 않다가 연속 투사체 공격을 할때..

첫 게임 개발(18) _ 적 보스 체력바 구현

적 보스의 체력바를 간단히 구현해 볼 것이다. 위젯 블프를 만들어 위와 같이 ProgressBar를 이용하여 화면 위쪽에 생성하고 색을 빨강으로 조정한다.ProgressBar 옆의 변수체크를 꼭 해준다. UpdateHealthPercentage 함수를 만들고 SetPercent 함수로 CurrentHealth를 MaxHealth로 나눈 값을 입력하도록 한다.이는 남은 체력 비중을 SetPercent 함수에 넣어 Progress바에 표시되도록 하는 과정이다. 적 블프에서 CreateWidget 함수로 시작시 체력바 위젯을 포함하도록 하고 변수로 승격한다. 데미지를 입었을 때 DoOnce로 한번만 AddVieport를 실행하도록 하고 이후 데미지를 입을 때마다 UpdateHealthPercentage를 실행..

첫 게임 개발(17) _ 플레이어 에너지 시스템, 적 Blocking과 순간이동 구현

적이 플레이어의 던지기 공격을 막아내는 Blocking과 플레이어의 뒤로 순간이동 후 공격을 만들어 볼 것이다. 또한 플레이어의 에너지 시스템으로 적을 기본공격으로 타격시 에너지 획복, 던지기 공격시 에너지 차감을 구현해 볼 것이다. StartBlock과 EndBlock 커스텀 이벤트를 만들고 BPC_DamageSystem에 있는 On Blocked 함수를 불러온다.None, Blocking, BlockedSucessfully 3가지의 경우가 있는 열거형 블프를 만든다.위와 같이 블락을 시작했을 때 블락하는 Block 애니메이션을 부르고 막는 중일때 BlockReact 애니메이션을 부른다.에셋에 마땅히 없어서 적당한 프레임을 할당하였다. BT에서 BTT를 만들고 위와 같이 블락을 시작하는 노드를 구성한다..

첫 게임 개발(16) _ 적 강공격 및 투사체 구현

적의 공격에 강공격과 강공격 이후 연계되는 투사체 발사를 구현해 볼 것이다.적의 강공격이 포함되어있는 에셋을 구해서 적용하였다. 강공격 범위를 측정하여 맞게 HitBoxStrongAttack 콜리전을 추가한다. 기존의 HitBox과 같은 구성이고 주는 데미지를 기존의 2배인 2로 하였다. 기존의 BT에 강공격을 추가하고 쿨다운을 조정하였다. 적의 강공격인 StrongAttacking 이벤트를 만들고 위와 같이 강공격 애니메이션을 부르는 함수 이후 SpawnActor 함수로 투사체도 소환한다. 투사체 BP를 따로 만들고 PaperFlipBook을 추가하여 이펙트를 넣었다.히트 박스도 크기에 맞게 맞추어준다. 이벤트 그래프에는 다음과 같이 오버랩과 히트 두가지 경우로 나눈다.플레이어와 오버랩되면 데미지를 주..

첫 게임 개발(15) _ EQS 기초

적 AI의 움직임을 보다 다양하게 구현하기 위해서 EQS라는 시스템이 있는데 이를 간단히 다뤄 볼 것이다.생소한 영역이라 좀 어렵게 느껴졌고 적 보스의 움직임 제어에 필수이기 때문에 열심히 파고 들어야 할 영역인 것 같다. 블루프린트의 AI에서 Env Query라는 블프가 있다.이를 생성하면 원, 도넛모양, 사각형 등등 다양한 모양의 EQS를 만들 수 있는데 일직선으로 EQS를 만들어야 하는 2D에 맞는 월뿔모양의 EQS를 만들었다.   이후 아래에 Distance에 따른 가산점을 주는 조건을 붙여 가까운 거리를 더 우선적으로 이동하도록 하였다.  그 다음으로 EnvQueryContext_BlueprintBase 블프를 만든다. 임시로 사용하는 EQS_TestingPawn를 만든 뒤 Context 블프에..

첫 게임 개발 (14) _ 능력 구현

메트로배니아류의 게임에 필수적인 능력구현을 해 볼 것이다. 먼저 전에 대쉬 중 무적을 넣기 위해 기존의 반짝거리는 무적 대신 반짝이는 효과를 없앤 TriggerInvincibilityNOFlick 이벤트를 따로 만든다.  이를 대쉬 노드 가운데 함수를 호출한다.이로서 대쉬 중 무적이 구현된다. 능력을 획득하는 Pickup 블루프린트를 만들고 위와 같이 박스 콜리전과 Sphere 스택틱 메쉬를 넣는다.  능력을 저장하는 열거형 블루프린트를 만든다음 우선적으로 구현할 Double Jump와 Throw 2가지를 추가한다.능력이 더 추가로 생기면 추가로 만들 수 있다. BP_Player에 변수를 추가하여 UnlockedAbilities로 이름짓고 변수형을 방금 만든 열거형 블프로 할당한다. 또한 함수도 추가하여..

첫 게임 개발 (13) _ 벽 슬라이딩, 벽 점프, 대쉬 구현

이번에는 플레이어의 캐릭터에 벽 슬라이딩, 벽 점프, 대쉬를 구현해 볼 것이다.다양한 모션이 필요해서 에셋을 새로 하나 구해서 적용하였다. 플레이어가 벽 슬라이딩을 하기 위한 조건을 따지는 분기점이다.캐릭터의 z방향 속도가 -50 이하이고 벽을 향하여 플레이어가 방향키를 누르고 있으면 벽 슬라이딩을 하는 조건이 된다. 위의 조건을 만족하면 라인 트레이스 함수로 벽을 찾는다.캐릭터의 위치 벡터에 (캐릭터의 정면 단위 벡터 x 변수)를 더해 캐릭터에서 캐릭터의 정면으로 향하는 선을 만든다.이 선이 WorldStatic 콜리전(벽)을 만나면 캐릭터의 z 속도만 조절하여 천천히 내려오도록 만든다. 위와 같이 노드로 접어서 정리한다. 다음은 벽 점프이다.점프 버튼을 눌렀을 때 앞에서 만든 Is Wall Slidi..

첫 게임 개발 (12) _ Inventory _ 체력 UI 구현

체력 UI 구현을 위해서 하트 텍스처를 할당해 볼 것이다. Percent 변수의 디테일에서 스폰시 노출을 체크하여 위젯을 부를때 Percent 값을 할당 할 수 있도록 한다. PrintString을 다 지우고 Create WBP Heart Widget을 각각 추가하고 각 Percent에 알맞는 값을 입력한다.Add Child 함수를 이용하여 HealthBar에 입력되도록 한다. 위와 같이 체력이 줄어들면 그에 맞춰서 줄어드는 체력 UI를 확인 할 수 있다. WBP_HealthBar의 복잡한 노드들을 함수로 묶어 Update Health Bar로 이름 붙인다.이는 뒤에서 체력이 변하는 상황에서 편하게 함수로 불러오기 위함이다. 인벤토리를 열지 않고서도 바로 체력을 볼 수 있도록 BPC_Inventory에서..

첫 게임 개발 (11) _ Inventory _ UI 및 체력시스템 설계하기

보더를 사용하여 위아래 배치 후 투명도를 조절한다. 이미지를 배치하여 동전 이미지를 삽입하고 텍스트로 옆에 배치한다. 돈의 수를 나타내는 텍스트에 위처럼 MoneyAmountWidget에 바인드 해준다.  위와 같이 BPC_Inventory의 MoneyAmountComponent 와 MoneyAmountWidget을 연결하여 돈 획득시 연동하도록 구성한다. I를 눌러 인벤토리를 확인하면 위와 같이 돈이 획득되어 숫자가 올라가는 것을 볼 수 있다. 체력을 위젯을 만들기 위해서 WBP_Heart 위젯을 생성하고 위와 같이 이미지를 넣는다.이미지의 변수 여부를 체크하여 변수로 사용할 수 있도록 한다. Percent 플로트 변수를 추가로 만들고 위와 같이 Percent가 1, 0.5, 0 일때 각각 풀 하트, ..

첫 게임 개발 (10) _ Inventory _ 위젯 구현하기

키보드 I를 누르면 블러 효과가 있는 위젯이 나타나는 것을 구현해 볼 것이다. WBP_Inventory 위젯 블루프린트를 만들고 위와 같이 캔버스 패널 - 오버레이 - 배경 블러 순서로 계층을 만든다. 키보드 I 입력을 위해 기존의 IMC_Action에서 IA_Inventory를 추가하고 I를 할당한다. BP_Player에서 Create Widget 함수를 추가하고 위젯을 변수로 할당한다. IA_Invetnroy (키보드 I 할당)를 추가하여 Add to Viewport로 Inventory Widget을 할당한다.인게임에서 I를 누르면 위와 같이 블러 표현이 된 위젯이 나타나는 것을 볼 수 있다. 위젯을 열었을 때 마우스 커서 표시와 UI에만 포커스를 맞추도록 위와 같이 추가한다. Set Input Mo..