Unity_본캠프

[내일배움캠프 14일차] TextRPG-이번에는 팀플이다! 4

전기연(Unity_9기) 2025. 4. 24. 22:06

1. 오늘의 할 일

스킬.

그리고 이 스킬들의 리팩토링.

 

대충 이런 마음가짐으로 렛츠고

aka. 배치고사 망친 자

2. 작업 개시🛠️

일단 어제부터 계속 집어넣던 스킬들을 다 넣은 현황을 보도록 하자.

직업 6개×직업별 스킬 3개 = 18개

내가 아무리 overrides를 써도 점점 늘어진다.

심지어 각 스킬별로 타게팅 대상도 다르고, 선언 시 공통된 부분이 많아서 조정이 필요하다.

특히 생각해야하는 것
: 타겟팅을 스킬사용 함수 내에서 실행하도록 만들어야 한다.

 

타겟팅 대상은 다음과 같다.

1. 자기자신

2. 적 단일개체

3. 적 전체

 

또한 딜링기만 있는 것도 아니고, 효과도 제각각이기 때문에 조정이 필요하다.

스킬 분량도 장난이 아니다.

 

자기최면 on

 

자, 처음에 말했다.

'타겟 대상은'

1. 캐릭터 본인, 2. 적 단일개체, 3. 적 전체 중 하나다.

얘를 계속 불러내야한다.

이거 손으로 다 칠 거 아니다.

이거 Self, SingleEnemy, AllEnemies

하고 다 치고 앉아있으면 나도힘들고 읽기도 힘들고.

스킬마다 타입도 달라서 쓰고 있다가 내 뇌정지가 먼저 올 것이다.

 

그럼?

>enum. 번호 넘버링 시켜서 집어넣는다. 안그래도 저기 밑에 skill class에 TargetType 함수도 만들어놨다.

 

그리고 UseSkill 함수에 (character, monster)로 받지 말고, (character, List<Monster>monsters)로 받도록 만들었다.

저기 몬스터 집합에는 전투 필드에 스폰된 몬스터들이 투입되고, 각 타겟팅 타입에 따라 UseSkill내부에서 적을 선택하도록 만들 것이다.

(사실 대상 선택은 SingleEnemy일 때만 하면 된다.)

위에가 과거코드, 아래가 현재 코드.

 

그럼, 이렇게 리스트로 받으면 어떻게 선택할 건데? 저렇게만 하면 못쓰잖냐.

정답: 가라! 스위치(Not 닌텐도)!

사용자가 입력하지 않는 switch를 처음 보는 기분이 든다….

구조는 다음과 같다.

 

 

1. 해당 스킬의 처음에, targetType 변수EnumTargetType를 이용하여 대상을 확인한다. (1.이면 자기 자신=Self, 2. 단일개체-플레이어가 대상 선택할 수 있도록 함수 호출, 3. 적 전체 - 대상 전체를 리스트째로 불러옴)

2. 만약 단일 개체인 경우, SelectSingleEnemey 함수를 호출하여 적들 중 하나를 선택하도록 한다.

단, 여기서 쓰러트린 몬스터는 선택되어서는 안되는데, 해당 부분은 아직 구현되지 않았다. (헤)

3. 만약 전체 공격인 경우, foreach를 사용하여 적 전체에게 효과를 적용시킨다.

(어쩐지 빨간줄이 뜨더라. var target을 targets로 수정하면 된다.)

타겟 리스트를 1부터 마지막 번호까지 공격하고 다음으로 넘어가는 구성이다.

 

4. 공격에 부가효과가 달려있는 경우,  ApplyEffect()를 작성하여 효과를 집어넣고, 가상 메서드virtual void UpdateSkillState()를 각 턴의 마지막에 집어넣어 매 턴 스킬의 효과를 확인하도록 만든다.

효과가 끝나면 OnEffectEnd() 추상 메서드를 이용하여 각 스킬별로 받았던 버프를 해제하도록 요구한다.

 

이런 구조로 총 18개의 스킬을 다시 리팩토링 하면 된다. ^^!

그런 다음 캐릭터 cs에 리스트를 만들어 각 직업마다 다른 스킬이 상태창 아래에 나타나도록 만들 것이다.

 

3. 내일 할 일

스킬. 고친다.

거의 엉망진창이라 고치는게 좋을 것 같아서 손을 댔다.

이러고 오류나면 좀 울어야 하긴 하는데….

이걸 위해서 건들지 않던 추상매서드, 가상 매서드, var 값까지 끌고오기 시작했으니 어떻게든 뭔가를 할 수 있는 게 아닐까 하는 자신감이 차오른다.

내일도 파이팅