STAC 개발일지

[ STAC 개발일지 ] 스택 개발일지 1 - 플레이어 최적화

vcs 2024. 6. 23. 01:13

학교에서 SK텔넷에서 진행하는

스마트 틴 앱 챌린지 참가한다고 팀 꾸려서 학기 초부터

기획도 하고 많은 우여곡절을 겪었다.

 

(대충 유저가 해커이고 플레이어가 바이러스가 되어 해킹하는 로그라이크 게임이다)

 

현재 예선과 본선을 통과하고 결선만을 앞둔 차례이다

본인 팀은 Code:Unknown이다 (팀명은 ReverseD)

 

왜 여태까지 과정은 일지를 안 썼냐면,

본 개발보다는 기획과 데모개발이 우선이라

크게 중요성을 못 느낀 데다가 떨어지면 뭔가 글을 마무리 짓기도 좀 애매해져서

미루다가 이제야 작성하게 되었다.

 

어쨌든..

 

기획은 모두 끝난 상황이고 여태까지 계획하고 데모로만 만들었던 것 들을

모두 구현해야 한다.

 


 

일단은 가장 처음 겪는 문제가,

여태까지 생각 없이 급하게 짰던 코드들을 리팩토링 해야 한다

우리 게임의 플랫폼은 모바일이기 때문에 더욱 최적화에 신경을 써서 개발해야 한다.

 

본인이 팀장에다 메인 개발자라 중요한 코드들을 담당하게 되었는데

따라서 플레이어 쪽 코드랑 싹 다 갈아엎을 예정이다.

 

객체지향적 구조에 따라 정석적인 코드로 가장 깔끔하고

효율 좋게 코드를 짤 것이다.

전에도 똑같이 짰었지만 기능들이 추가되면서 SOLID규칙이 많이 깨졌다.

 

우선

Agent로 Player와 Enemy를 묶는 상위객체를 통해 움직이고 공격하는 엔티티를 구현한다

 

코드 올리기 좀 무서운게, 나중에 다시 이 글 보고 자괴감 느낄 수도있다

공통적으로 관리하는 부분들을 Agent에서 묶어서 처리하는 것이다

 

Enemy 쪽에서 애니메이터 기반 FSM을 사용할 수도 있어서 Animator랑

움직임을 담당하는 Movement 등등을 모두 때려 박아둔다

 

이후

Player에서 Agent를 받아와 상속받아 둔다.

 

클래스들은 각자 자기만의 기능만을 가지고있어야 하므로

여러 개의 스크립트로 분할하여 코딩을 하게된다.

(팀으로 프로젝트를 굴리기때문에 스크립트를 분할하는것은 더욱 중요하다)

 

Agent~ 의 코드들은 모두 다 Agent를 owner로 참조하여

정보들을 같이 공유하여 코드들의 결합력이 굉장히 높다.

따라서 외부에서 이들에 간섭할때 간접적으로 가져올수 있는 여지를 남겨놓아야한다.

 

간접적으로 접근하려면 GetComponent등과같은 작업에서 클래스를 직접 가져오기 보다는

인터페이스를 통해 필요한 기능을 참조해오면 결합력을 줄이고 간결한 코드를 짤 수 있다.

 

객체간의 높은 의존성은 곧 유지보수를 하기 어렵게 만든다.

따라서 Loose Coupling, 낮은 의존성, 헐렁한(?) 결합력을 지향해야한다

 

이를 위해 Interface를 활용하여 간접적인 의존을 하게되는것이다.  

 

또한 PlayerController에 들어있는 속력을 가지고 오고싶을때,

플레이어의 VFX효과를 재생하려할때, 스킬등을 활성화할때.
모두 Agent만 있으면 접근할 수 있도록 Agent에 각종 기능들이 담긴 컴포넌트들을

프로퍼티로 담아놓은 것이다.

 

Agent랑 또 오브젝트들도 새로만들긴 했는데

따로 다 설명하기는 귀찮으니 이까지만 쓴다