본문 바로가기
개발 (Game)/(2021) Unity RTS 포트폴리오

[Day 4-1] 유닛 세분화 + 유닛 매니저 구현, 확장 메서드로 스텟 부여

by 진현개발일기 2021. 7. 15.

[2021. 07. 15]

어제 컨디션이 너무 안좋아서 유닛 이동 수정이랑 카메라 구현만 했었다.

어제 못한만큼 오늘 속도를 낼 것이다. 일단 휴식을 취하기 전에 오늘 오전에 구현한 것을 정리할려고 한다.

 

[유닛 세분화]

클래스 계층은

부모: Units (abstract)

자식: Soldier(병사), Tank(탱크), FieldGun(야포)이다.

 

일단 유니티 상에서 스크립트를 만들어야한다.

 

유닛 매니저
UnitData(Scriptable Object)를 활용하여 매니저에서 데이타를 기입하는 방식으로 유닛을 만들 것이다.

 

▼ UnitData.cs

▼ SpawnManager.cs

▼ UnitHandler.cs

구조는 이렇다. 지구 씬에서 유닛을 구매할 시에 SetSpawnUnitStats함수 안에 구입한 유닛을 인자로 넘겨서 UnitHandler에서 인자로 받은 유닛의 타입에 맞는 데이타를 넘겨줌으로써 구입한 유닛에 스텟이 세팅된다.

추후에 더 넣을 코드는 Purchased 리스트에 구매한 유닛들을 넣어줬다가 월드씬으로 이동할 시에 넘겨주는 것이다.

 

 

두 번째 인자는 구매한 유닛 숫자이다. (분대 숫자)

 위의 설명과 같이 두 번째 인자 값은 분대 갯수이다. 그러므로 실제로 월드씬 UI에서 보여지는 병사 숫자는

 (인자 x 8) 이다. (12 -> 8로 수정했음)

 

 

 

▼ 성공 사례들 ( ※ 처음에 병사 숫자를 12로 두고 했었어가지고 Personnel이 12 이다)

유닛 종류 3개 다 성공함
부대x5 성공함 

 

성공하고나서 이제 오버라이드를 통한 공격함수를 어떻게 짤지 고민 하는 도중에 유닛에 레벨을 안넣어 준 것이 떠올랐다..; 레벨을 부여하고, 인터페이스도 추후에 활용하여서, 병종에 따라 Lv2일 경우 랜덤 확률로 공격 받을 시 반격을 하는 시스템을 넣어야 겠다는 생각이 들었다. 그리고 Lv에 따라 유닛의 스텟 또한 달라져야한다.

 

 

if/else if를 사용하면 되겠지만 확장 메서드를 활용해서 구현을하면 연습도 될겸 좋겠다고 생각이 들었다.

 

[확장 메서드]

Units.cs
ExtensionsCollect.cs
확장 메서드 (lv1) 성공
확장 메서드 (lv2) 성공

위 확장 메서드는 말그대로 연습용이였다. 나중에 if/else if로 바꾸고 적절한 상황에 확장메서드를 위와 같이 한 번 써봐야겠다.

 

[확장 메서드 수정 글은 이 뒤에 있다. 위에 것은 말 그대로 연습이고 용도에 맞게 추후에 수정하였음.]

728x90