[TIL] 가위바위보 슈팅 게임(?) 개발

개요

오늘 라이브강의에서는 블루프린트로 기초적인 자료형, for문 brach같은 기본적인 내용을 배웠다. 과제는 텍스트로 간단히 슈팅게임과 가위바위보를 구현하는 것이 나왔지만....우리 평범하지 않은 팀원분들이 다같이 실제 게임을 만들자고 하셨다..!! 전체적인 게임 기획과 내가 구현한 내용을 정리해보겠다.

 

가위바위보 + 슈팅게임??

원래 과제였던 가위바위보와 슈팅게임을 모두 만족하는 게임을 구상해봤다.

기본적인 기획은 

주인공을 추적하는 가위, 바위, 보 적들을 가위 바위 보 총알을 사용해서 물리치며 최대한 오래 살아남기

 

위의 게임목표를 기준으로 세부적으로 규칙을 설정하였다.

규칙

    • 상하좌우로 움직일 수 있고 마우스로 맵을 돌아볼 수 있다.
    • 플레이어는 랜덤한 30개의 가위,바위,보 탄이 나열된 탄창을 가진다.
    • 가위바위보 탄이 소모되면 R 키를 눌러 재장전이 가능하다
    • 가위바위보 탄창의 가장 위에 있는 탄이 플레이어에게 주어진다.
    • 플레이어는 주어진 탄을 마우스 좌클릭을 통해 적 개체에게 발사할 수 있다.
    • 발사한 가위바위보 탄이 적 개체에게 맞으면 적 개체와 탄의 종류에 따라 이벤트가 발생한다
    • 발사한 탄이 적 개체 종류에 우위이면, 적 개체를 소멸시킨다.
    • 발사한 탄이 적 개체 종류와 같다면, 아무일도 일어나지 않고 탄만 소모된다.
    • 발사한 탄이 적 개체 종류에 열위이면 플레이어의 HP를 10 감소시킨다.
    • 힐 키트와 충돌하면 플레이어의 HP가 10 증가한다.
    • 적 개체와 충돌하면 플레이어의 HP가 20 감소한다.

구현한 내용

나는 추적하는 가위바위보 적과 이를 맵에 스폰하는 스포너 구현을 맡았다.

적 개체 구현에서 모르는 것이 많아 애먹었는데 구현해야할 것을 정리하자면

  • 플레이어 추적
  • 불릿과 플레이어 충돌 시 처리
  • 렌덤 위치에 일정 시간마다 적 생성

가위바위보 적

호밍 구현

적 추적은 projectile Movement 컴포넌트를 활용했다. projectile Movement는 보통 발사체 구현을 위해 사용하는 컴포넌트이다.

 

초기속도를 200으로 조정하고 회전이 속도를 따름을 활성화해 추적할때 추적 물체를 바라보면서 따라올 수 있도록 했다.

완성된 적.... 

너무 밋밋해서 뒤에 파티클로 발사되는 느낌(?)을 추가해봤다.

플레이어가 적을 보고 가위인지 바위인지 보인지 구별할 수 있어야하기에 처음엔 각각의 3D 모델을 찾아서 하려했으나....

생각보다 찾기가 어려워 각 속성마다 색깔을 다르게 해 구별하기로 했다.

처음 스폰될때 머티얼과 enum값을 변경해 속성을 지정해주었다.

충돌 구현

스켈레탈 매시와 스태틱 매시가 충돌이 잘 되지 않아서(왜그런지 모르겠다....) Actor에 collision box를 추가해서 충돌을 담당하게 했다.

충돌된 오브젝트를 구별하기 위해 Cast To {Class}를 사용하였지만 좀 더 좋은 방법이 있을 것 같아 알아볼 예정...

가위바위보와 데미지 처리는 함수로 묶어서 처리했다.

가위바위보 로직같은 경우 개발시간에 쫓겨서 생각나는대로 후다닥 만들어서 좀 더 효율적으로 나중에 짜고 싶다.

Damage는 0이하 예외처리만 하고 구현!

 

적 스포너

적 스포너를 구현할 때는 actor를 어떻게 스폰하는지와 projectileMovement으 호밍을 위해 homing target component를 추가하는 것을 신경쓰며 구현했다.

허둥지둥하느라 몰랐지만 호밍 타겟지정은 적 객체의 속성을 변경하는 거라 스포너가 아니라 적 객체안에서 했으면 더 깔끔했을 것 같다!

느낀점

사실 아직 언리얼에 대해서 제대로 몰라서 처음 팀원분이 좀 더 게임같이 만들자! 했을 때 이걸 할 수 있나라는 생각이 더 컸다. 근데 모르는 것들 꾸역꾸역 찾아서 하니 어떻게든 만들어냈다는 점이 신기하고 뿌듯했다.

한편으로는 이렇게 간단한 것도 내가 아직 잘 못하는구나라는 생각에 빨리 제대로된 게임을 만들어보고 싶다는 생각돌 들었다. 여러모로 많은 걸 느낄 수 있던 시간!!

추가로 공부해야 할 점

  • 매시와 충돌 설정이 아직 많이 헷갈리는 것 같다. 프로시저럴 컴포넌트의 역할은 무엇이고.....스캘레탈 매시와 그냥 매시의 차이점도 알고 싶다.
  • 오버랩이나 히트시 상대 오브젝트의 처리를 어떻게 하면 깔끔하고 느낌있게 할 수 있는지 알고 싶었다..

'Unreal' 카테고리의 다른 글

[Unreal] Reflection  (2) 2024.12.24
[Unreal] UPROPERTY  (0) 2024.12.24
[Unreal] Simple & Complex Collision  (0) 2024.12.21
[TIL] 움직이는 캐릭터 만들기  (0) 2024.12.19
[TIL] Multi-User Editing(협업 환경 세팅)  (0) 2024.12.17