본문 바로가기
게임 개발/유니티 게임 개발 일지

#4 캐릭터 구현하기 - 기능 별로 스크립트 구조화하기

by FlowTree 2020. 2. 19.
반응형

기능 별로 스크립트를 구조화를 한 이유

원래 구현할 사항은 IK를 이용해서 스태프를 잡기인데 이 기능을 구현하려고 유니티 책을 보니

다양한 스크립트들이 서로 연결되어있어 파악하기 힘들었다.

 

그래서 유니티 책에 있던(좀비슈팅게임 파트) PlayerInput, PlayerMovement, Gun, PlayerShooter 스크립트를 공책에 적었다.

적으면서 스크립트 마다 어떤 내용이 있고 어떤 기능을 하는 지 파악하려고 했고, 또한 내가 구현하고 싶은 기능들을 어떻게 스크립트에 작성해야 하는지 스크립트 작성 구조?를 알고자했다.

 

적다보니 스크립트에 무엇이 있고, 어떤 기능들이 있는지 어느 정도 내용과 구조를 파악했다. 

 

유니티 책의 스크립트 분석

PlayerInput

-사용자의 입력 버튼을 변수 선언

-매 프레임 입력 감지

-버튼 입력에 관한 기능들

 

PlayerMovement

-버튼 입력을 통해 실질적인 캐릭터 움직임 기능 구현

-전진, 후진 움직임 속도 변수 선언

-좌우 회전 속도 변수 선언

-FixedUpdate() 메서드(물리 갱신 주기에 맞춰 실행)를 통해 
 움직임 기능(Rotate(), Move(), 버튼 입력값을 통해 적절한 애니메이션 실행) 구현

-Rotate() 메서드, 좌우 회전 기능

-Move() 메서드, 전진, 후진 움직임 기능

-애니메이터를 이용해 애니메이션 실행

 

Gun

-총, 총의 기능 구현

-총의 상태(프로퍼티, Enum, 코루틴(IEnumerator) 이용)

-총의 파라미터(공격력, 사정거리, 남은 전체 탄알, 탄창 용량, 현재 탄창에 남은 탄알)

-총의 시간 관련 파라미터(발사 간격, 재장전 시간, 마지막으로 발사한 시점)

-라인렌더러(탄알 궤적)

-파티클시스템(총구화염, 탄피 배출)

-오디오소스(총소리, 발사소리, 재장전소리)

-발사 기능(Fire() 메서드, Shot() 메서드, ShotEffect() 메서드)

-재장전 기능(Reload() 메서드, ReloadRoutine() 코루틴)

 

PlayerShooter

-IK를 이용한 총 착용

-PlayerShooter 활성화/비활성화 > Gun 활성화/비활성화

-발사 입력 감지 > Gun 스크립트의 Fire() 에 전달

-재장전 입력 감지 > Gun 스크립트의 Reload() 에 전달

 

유니티 스크립트 구조화

스크립트들을 구조화를 하고나니, 각각의 기능들을 파악하기 좋았다.

스크립트에는 변수와 메서드로 구성되어있다. 구현하고자 하는 기능에 필요한 변수들을 선언, 그 변수들은 해당 스크립트에서만 사용하거나, 다른 스크립트에서도 이용할 수 있다. 메서드를 중심으로 작은 기능을 구현하고, 다른 메서드에서 작은 메서드를 통합적으로 실행하여, 큰 기능을 구현한다는 것을 알았다.

 

 

내가 개발 중인 게임의 캐릭터 스크립트 구조화

위의 분석을 통해서 입력과 기능을 구분하여 스크립트를 구조화했다.

 

PlayerShooter의 기능이 총을 이용하기 위한 입력값 감지, 값을 Gun 스크립트에 전달하는 역할이라서

PlayerWeapon 스크립트에서는 다양한 주무기 값을 감지하고, 공격이나 스킬 입력 시 착용한 주무기에 맞는 스크립트로 값을 전달하여 주무기와 공격, 스킬을 구현할 예정이다.(희망사항, 아마도 스태프만 구현할 듯, 여유있으면 추가하는 걸로)

 

PlayerWeapon과 Staff 스크립트 구조를 생각할 때, 무기 상관없이 공용 스킬을 사용할지, 무기에 따른 공격과 스킬을 다르게 할지 고민을 했는데 아직 실력이 부족해서 스태프 이외의 주무기 기능은 구현하지 못하지만,

 

무기에 따라서 공격 애니메이션과 스킬들을 다르게하여 새로운 액션의 재미를 주고 싶었고(액션성, 다양성, 다크소울에 영향 받음), 새로운 주무기를 추가한다고 했을 때 손쉽게 확장할 수 있을 것 같아서(확장성) 무기 별 공격과 스킬이 다른 구조로 선택했다.

 

통찰?

아직까지는 눈으로 책을 보는 것보다 손으로 적어서 내용을 파악하고 정리하는 게 머리 속에 잘 들어오고, 좀 더 책을 많이 읽어야 읽는 동시에 이해가 될 듯... 그리고 스크립트는 어떻게 작성해야 할지 조금 알게됐다.

 

시스템을 구현하기 위해서는 기능 중심(메서드)으로 (+변수, 파라미터, 각종 데이터들) 스크립트가 구성된다는 것을 알았고,

이 부분은 시스템 기획을 할 때도 시스템을 기능 중심으로 구조화하고 문서를 작성한다면 기능들을 한 눈에 파악+이해하기 좋고, 부분별로 기능을 구현하기에도 좋다는 것을 경험했다.(물론 회사별로 무엇을 중요시 하냐에 따라서 이해와 구현 방법에 차이는 있겠지만 나로써는 알지 못하니, 내 경험을 중심으로...)

 

확실히 혼자서 게임 개발을 도전하니 시스템에 대한 이해가 생기는 것 같다. 그리고 실력이 부족하다보니 핵심 시스템 위주로 구현하게되고 자연스레 핵심이 뭔지 조금씩 알아가고 있다.

반응형

댓글