본문 바로가기

프로젝트/게임 개발

[03] 230103 게임 개발 일지 - 스탯 함수 + 장비 장착시 스킬 배우기

멋사에서 진행하는 개인 프로젝트와 연말 행사와 약속에 정신이 없어 게임 개발에 소홀해졌다...

연말에 휴강하며 쉬면서 충전된 에너지를 토대로 앞으로 열심히 해야겠다...

 

1. 스탯 함수

전투 스킬 레벨에 따른 스탯 보너스를 구현하기 위해 스탯 함수를 튜닝 했다.

 

그러던 도중, 함수 내에서 스탯을 불러 올 때 원래 계산되었던 스탯이 아니라,

캐릭터 레벨에 따른 초기 셋팅값을 불러와 혼동이 많이 왔다.

 

또한, 아이템 착용 시 실행되는 Server.onRefreshStat 함수와, 그 함수에 추가시킨 커스텀 함수 간의 작동 차이가 있는 것을 발견했다.

이로 인해 데미지 함수에서 전투 스킬 레벨이 오를 때, 커스텀 함수가 아니라, 스탯을 다시 계산하는 unit.RefreshStats()을 불러와야 함을 깨닳았다.

 

결과적으론 정말 간단하게 실행 되는 함수지만, 많은 시행착오가 있었다.

아이템 증가 수치가 언제 더해지는지 몰라 발생하던 수치적 오류,

커스텀 함수의 중복 호출로 중복으로 수치가 오르는 오류,

스탯이 변할 때 불러오는 함수의 차이로 인해 초기 스탯값이 달라지던 오류들 등등이 발생하면서, 하나 고치면 하나가 문제가 되며 골치가 꽤나 아팠다.

데미지 함수에서 스탯이 오를 때 유닛 변수를 설정해서, 그것을 인덱스 삼아 커스텀 함수에서 조건문으로 분리하여 따로 스탯로직을 짰던 시도 등 돌아돌아 로직을 억지로 변경하려 하니 효율성 문제도 걸려서 참 답답했다...

 

그 과정에서 중간중간 수치를 print하도록 로그를 짜며 확인하는 것의 중요성을 느꼈다. 확실히 로그를 짜면서 테스트를 해보니 어디서 수치가 잘못들어갔고, 어느부분이 이상한지 추측하기가 편해졌다.

 

그리고, 로그에 수치를 표시하여 기획자 엉님한테 오류가 있나 검토를 맡길 수 있어 정말 행복했다.

내가 발생할 수 있는 오류의 가능성을 혼자 테스트하는 것보다 훨씬 꼼꼼하게 봐준다. 나였으면 꽤 놓쳤을 오류가 있었다...

다만, 다양한 조건에서 테스트 할 수 있도록 변수 세팅 같은 방법이나 실행 로직 등을 알려줘야 했는데, 보다 쉽게 설명하고, 정리된 설명을 할 수 있도록 노력 해야겠다는 생각이 들었다.

 

또한 자바에서 정말 귀찮아 하던 테스트 함수와 디버깅의 소중함을 깨닫게 되는 순간이었다...

 

2. 장비 장착시 스킬 배우기

스탯 함수를 손을 보고, 조금 시간이 남아 간단히 작업할 수 있는 스크립트를 작성했다.

 

지금 기획되어 있는 전투스킬은 무기에 의존되어 있다.

예를 들어 검을 장착하면, 검 일반스킬과 검 강공격 스킬을 사용 할 수 있고 추후 개발할 특수 스킬중 패링을 사용 할 수 있게 된다.

검을 장착했을 때, 대검스킬이나 창스킬이 남아있는경우, 이를 사용할 경우 모션 등 문제가 생겨 스킬을 없애야한다.

 

간단 로직을 설명하자면,

1. 해당 함수는 장비를 벗고 입을 때 실행되도록 한다.

2. 장착 무기 슬롯의 아이템의 dataId를 불러온다.

3. 만약 dataId == nil 이라면, 자신의 전투 스킬을 모두 제거한다.

4. 만약 dataId ~= nil 이라면, 장착 무기 슬롯의 아이템의 dataID를 불러와서 이와 관련된 스킬 table과 매칭하여 해당되는 스킬 이외의 것을 제거하고, 해당 스킬은 배우게 된다. (공격, 강공격만 현재 구현)

 

처음에는 스탯이 변할때 실행되는 함수인 Server.onRefreshStat에 넣었었다. (장비를 빼고 낄때 스탯의 변화가 있기 때문에)

다만, 다시 생각해보니 이는 다른 상황에 비효율적으로 함수가 호출되는 경향이 있어 장비를 벗고 입을때만 실행되도록 하였다.

이 과정에서 무기를 빼고 낄때만 함수를 실행시킬까 고민도 해보았지만, 이는 네코랜드 플랫폼 내 db에서 설정해주어야 해서, 모든 장비에 대해 해당 함수를 실행하도록 지정하는 것이 다소 비효율적이라 패스했다.

 

로직을 좀 고민해보자면, 스킬을 제거하는 로직이 다소 중복되는 경향이 있나 생각이 들었는데,

이는 장비를 완전 탈착했다 새로운 장비를 끼는 경우가 아니라, 다른 무기로 교체할 때, 4번 로직도 구현이 필요함을 느껴 가만히 두었다.

 

새로운 함수를 추가할 때, 항상 이게 맞나 하는 고민이 든다...

실행이 되지만 너무 서버에 과부하가 걸리진 않는지... 실행조차 맞게 되는지 하는 걱정이 많이 든다...

이미 구현된 함수에 비교적 간단한 스크립트만 추가하여 개발하는것인데, 아예 뼈대부터 세우는 게임개발 업계가 대단하다 생각이 든다...