본문 바로가기

프로젝트/게임 개발

[02] 221223 게임 개발 일지 - 데미지 함수 버그 해결하기 (1)

데미지 함수를 만들고 있는 도중 버그가 참 많이 나고 있다.

하나하나씩 다시 살펴가면서 고치고 있다....

 

1. 명중률 문제

1) 몬스터의 명중률이 0 이상인데 계속 miss가 떴다.

이는 명중률 처리 함수에서 몬스터 데미지 함수 밖의 hit 변수를 참조해야 되는데 local로 새로 선언해 버려 나는 문제였다...

항상 변수 선언할 때 조심하자....

 

2) 명중률을 통해 miss 처리해도 데미지가 들어가는 버그가 있었다.

이는 명중률 적용 함수가 된 후 return을 통해 빠져나오지 못하고 그 뒤의 데미지 처리 함수가 실행되었던 것으로 밝혀졌다.

뒤의 데미지 처리 함수가 실행되지 않도록 명중률 외에도 전투 외 스킬사용, 무적 버프 등의 함수 처리에서 miss index를 추가하여, index에 대한 if문을 통해 그 뒤의 함수들이 실행되게 하였다.

//Lua

notCombatSkill()
missAtk()

if missCheck ~= 1 then

	userAtk()
	damageDrop() -- 뎀감
	userToMonsterDamageDrop() -- 레벨 뎀감
	StrongAtk() -- 강공격처리
	criticalHit()
	
	skillExp() -- 스킬 경험치
	
	damage = dd
end

조건문을 통해 다른 함수들을 실행하니 경험치 획득에서 발생하는 문제들 또한 해결되었다.

 

2. 의문의 NullReferenceException

기획자 엉님이 토끼를 잡았더니 계속 에러로그가 떠서 데미지 로그 확인이 어렵다 하였다.

죽는 몬스터에만 에러가 발생하는 것을 알아내 고민하다가 유닛이 죽을 때 실행되는  onUnitDead 스크립트에 문제가 있음을 깨닳았다.

유닛 타입이 몬스터일 때, CharacterID를 참조할 수 없어 발생하는 문제여서, 몬스터일때 return으로 함수를 빠져나오도록 하였다.

 

3. 스킬 레벨 경험치 요구량

스킬 레벨 경험치 요구량이 다음 레벨치가 들어가는 것을 확인하였다.

간단한 수치 수정으로 해결하였다.

역시 꼼꼼한 테스트가 중요함을 느꼈다...

 

버그들을 수정하면서 제대로 확인 안해서 시간 낭비를 하는 경우가 많았다...

버그를 고치다보면 사소한 것들의 실수에서 버그가 발생하는 것이 꽤 많다...  한번 짤 때 꼼꼼하게 짜야겠다...

또한 최대한 원인들을 꼼꼼히 생각하고, 확인을 해봐야겠다...

스크립트 외에 데이터베이스에 대한 확인도 필요함을 느꼈다...

 

다음엔 꼭 스탯 빨리 만들어야지...