AI로 구현하기

마인크래프트 BE 도구 품질 시스템은 왜 두 번의 수정에도 제대로 작동하지 않았을까?

도안 2026. 9. 27. 17:27

 

앞선 글에서는 처음 만든 마인크래프트 BE 도구 품질 시스템을 실제 월드에서 테스트하면서 한 가지 큰 문제를 확인했습니다.

품질이 결정되고, 아이템 이름에 수식어가 붙고, Lore에 특성이 표시되는 것까지는 생각보다 잘 작동했습니다.

 

하지만 공격력 +2처럼 화면에 표시된 수치가 실제 몹에게 주는 피해에는 제대로 반영되지 않았습니다.

그래서 이번에는 첫 테스트에서 발견한 문제를 수정하기 시작했습니다.

 

 

그런데 한 번 수정하면 바로 해결될 것이라고 생각했던 것과 달리, 계산 자체와 실제 피해가 적용되는 과정이 서로 다른 문제라는 것을 확인하면서 여러 번 구조를 다시 살펴봐야 했습니다.

 

 

처음 만든 마인크래프트 BE 도구 품질 시스템은 실제로 잘 작동했을까?

앞선 글에서는 기획했던 마인크래프트 BE 도구 품질 시스템을 처음 실제 애드온으로 옮기면서 어디까지 구현할 수 있었는지를 정리했습니다. 아이템마다 품질을 부여하고, 대표 특징을 이름 앞

buildtheidea.tistory.com

 

 

 

 

 

첫 번째 수정 시도에서는 전투 처리 구조를 다시 손봤다

첫 테스트 이후 바로 품질 시스템 전체를 다시 만들지는 않았습니다.

품질 생성과 아이템 이름, Lore 같은 기본 구조는 이미 정상적으로 작동하고 있었기 때문입니다.

 

그래서 문제가 있는 검의 전투 처리와 Tooltip 표시만 따로 수정하는 방향으로 범위를 좁혔습니다.

당시 공격력 증가가 실제로 적용되지 않는 원인 중 하나로 추가 피해 처리 과정이 다시 같은 전투 이벤트를 호출하는 문제가 의심됐습니다.

 

그래서 같은 공격이 계속 다시 처리되지 않도록 재진입을 막는 구조를 추가하고, 공격력과 관련된 계산도 한곳에서 처리하도록 수정했습니다.

 

이 과정에서 검의 특성도 다시 정리했습니다.

 

공격력,
이동 속도,
공격력 비율,
치명타 확률,
치명타 피해

 

 

위처럼 실제 전투에 연결할 수 있는 특성들을 중심으로 구성했습니다.  

 

새롭게 정리한 특성이 아이템에 붙고 Lore에 표시되는 것 자체는 정상적으로 확인할 수 있었습니다.

Tooltip의 색상 표시도 다시 조정하면서 품질 등급과 일반 특성 정보를 구분하는 방향으로 수정했습니다.

문제는 여전히 실제 공격 피해였습니다.

 

 

 

 

계산식은 만들어졌지만 실제 피해에는 반영되지 않았다

첫 번째 수정 이후에도 공격력 증가가 기대한 방식으로 작동하지 않았습니다.

 

그래서 수정된 코드를 다시 구체화 담당에게 넘겨 원인을 분석했습니다.

그 과정에서 공격력 비율 계산에도 문제가 있다는 것을 확인했습니다.

 

예를 들어 기본 피해가 4이고 공격력 +12%라면 계산 결과는

4 × 1.12 = 4.48

이 되어야 합니다.

 

 

하지만 추가되어야 하는 값인 0.48을 정수로 반올림하면서 값이 0이 되어버리는 구조가 있었습니다.

 

즉 Lore에는 분명히 공격력 비율이 표시되어 있었지만 실제 계산에서는 작은 퍼센트 증가분이 사라질 수 있었던 것입니다.

 

그래서 두 번째 수정에서는 실제 전투 계산에서 소수점을 버리지 않도록 하고, 고정 공격력과 공격력 비율, 치명타를 순서대로 계산하도록 구조를 다시 정리했습니다.

 

 

 

 

두 번째 수정 시도에서는 아예 디버그 정보를 표시했다

계속 코드를 수정하는 것만으로는 어디까지 정상적으로 계산되고 있는지 판단하기 어려웠습니다.

 

그래서 두 번째 시도에서는 공격할 때 계산 과정을 직접 볼 수 있는 디버그 표시를 추가했습니다.

실제 테스트 화면에서는 공격할 때

 

  • 기본 피해
  • 고정 공격력
  • 공격력 비율
  • 치명타 확률
  • 치명타 피해
  • 목표 피해
  • 보정값

 

같은 정보가 화면에 표시됐습니다.

 

디버그 화면

 

 

 

 

예를 들어 테스트에서는 기본 피해가 약 4.92이고, 고정 공격력이 +2라면 목표 피해가 약 6.92로 계산되는 것을 확인할 수 있었습니다.

 

즉 적어도 코드 내부에서는

기본 피해 + 공격력 특성 = 목표 피해 라는 계산 결과가 제대로 만들어지고 있었습니다.

 

 

그런데 실제 몹의 체력은 그 목표값만큼 줄어들지 않았습니다.

여기서 문제의 위치가 조금 더 분명해졌습니다.

숫자를 계산하는 부분은 작동하고 있었지만, 계산된 결과를 실제 마인크래프트의 피해로 전달하는 과정이
제대로 작동하지 않았습니다.

 

 

 

이 차이를 확인하기 위해 디버그를 넣은 것이 결과적으로 꽤 중요했습니다.

디버그가 없었다면 계산 공식이 잘못된 것인지, 실제 피해를 적용하는 방법이 잘못된 것인지 계속 구분하기 어려웠을 것입니다.

 

 

 

치명타도 계산과 실제 적용을 따로 확인해야 했다

치명타 역시 비슷한 문제가 있었습니다.

 

디버그에서는 기본 치명타 확률과 치명타 피해 수치를 확인할 수 있었고, 공격할 때마다 치명타 성공과 실패를

판정하는 것까지는 확인할 수 있었습니다.

 

하지만 당시에는 기본 공격력 보정부터 실제 체력 변화에 제대로 연결되지 않고 있었습니다.

 

따라서 화면에

 

치명타: 성공

 

또는

 

치명타: 실패

 

라는 결과가 나오는 것과 실제 치명타 피해가 몹에게 정상적으로 적용되는 것은 별도로 검증해야 했습니다.

 

이 과정에서 테스트 방법도 바뀌었습니다.

낮은 확률의 치명타가 우연히 발생하기를 기다리는 것보다 테스트 중에는 확률을 크게 올려 실제 피해량이 달라지는지를 먼저 확인하는 방식이 필요했습니다.

 

단순히 코드에 기능이 존재하는지만 보는 것이 아니라 예상한 숫자와 실제 몹의 체력 변화가 일치하는지 확인하는 테스트가 필요해진 것입니다.

 

 

 

 

두 번 수정했는데도 문제의 핵심은 다른 곳에 있었다

두 번째 시도까지 진행하면서 중요한 사실을 하나 알게 됐습니다.

문제는 공격력 계산 공식만이 아니었습니다.

 

당시 구조에서는 마인크래프트의 기본 공격이 이미 적용된 뒤 추가로 계산한 피해를 다시 넣으려고 하고 있었습니다.

 

즉 흐름이 대략

 

기본 공격 발생
→ 피해 적용 완료
→ 품질 특성 계산
→ 부족한 피해를 추가 적용

 

하는 방식이었습니다.

 

처음에는 이 구조도 충분히 가능해 보였습니다.

하지만 실제 테스트에서는 계산 결과가 정상적으로 나오고 있음에도 추가 피해가 원하는 방식으로 적용되지 않았습니다.

 

결국 “계산된 추가 피해를 어떻게 더 넣을 것인가?”라는 문제만 계속 수정해서는 해결하기 어렵다고 판단했습니다.

 

접근 방법 자체를 바꿀 필요가 있었습니다.

 

 

 

 

세 번째 시도에서는 공격이 적용되는 시점 자체를 바꿨다

세 번째 수정에서는 이전 두 번과 다른 방향을 선택했습니다.

기존처럼 마인크래프트가 기본 피해를 적용한 뒤 추가 피해를 다시 넣는 것이 아니라,

공격이 실제로 적용되기 전에 최종 피해량을 먼저 계산하고, 원래 공격의 피해값 자체를 바꾸는 방식으로 구조를 변경했습니다.

 

개념적으로는 다음과 같습니다.

 

 

마인크래프트의 기본 피해 확인

↓

고정 공격력 적용

↓

공격력 비율 적용

↓

치명타 판정

↓

치명타 피해 적용

↓

완성된 최종 피해를 원래 공격에 적용

 

 

이렇게 하면 별도의 두 번째 피해를 만들어낼 필요가 없습니다.

 

기존에는 기본 피해가 먼저 들어가고 추가 피해를 다시 넣으려고 했다면, 이번에는 처음부터 최종 피해를 계산해서 한 번만 적용하는 방식으로 바꾼 것입니다.

 

구체화 과정에서는 실제로 정상 작동하는 다른 전투 계산 사례의 계산 순서도 참고했습니다.

다만 그 구현을 그대로 가져오는 것이 아니라, 피해 계산 순서만 참고하고 현재 시스템에 맞는 방식으로 다시 구성했습니다.

 

 

 

 

전투 계산과 아이템 정보 읽기도 분리했다

세 번째 수정에서는 전투 계산 자체도 더 단순하게 만들려고 했습니다.

공격이 발생하는 순간마다 아이템 정보를 복잡하게 다시 처리하는 대신 현재 들고 있는 검의 전투 특성을 미리 읽어두고, 실제 공격 순간에는 필요한 숫자만 가져와 계산하는 방식으로 구조를 나눴습니다.

 

 

이렇게 하면 공격 순간에는

 

공격력 +2
공격력 +20%
치명타 확률
치명타 피해

 

같은 수치만 가지고 최종 피해를 계산하면 됩니다.

 

전투 계산 함수도 아이템이나 몹을 직접 수정하는 기능을 넣기보다 숫자를 계산하는 역할만 담당하도록 분리했습니다.

 

여러 번 수정하면서 단순히 오류 한 줄을 찾는 문제가 아니라, 기능마다 담당 역할을 분리하는 것이 중요하다는 점도 조금씩 보이기 시작했습니다.

 

 

 

 

원하는 기능에 가까워질수록 테스트 기준도 구체적으로 바뀌었다

처음에는 검을 한 번 휘둘러보고 피해가 더 들어가는 것 같으면 작동한다고 생각하기 쉬웠습니다.

하지만 여러 번 실패하면서 테스트 기준도 더 구체적으로 바뀌었습니다.

 

예를 들어

기본 피해가 4이고 공격력 +1이라면 실제 피해는 5가 되어야 하고,

공격력 +50%라면 실제 피해는 6이 되어야 합니다.

 

치명타 역시 테스트 중에는 확률을 100%로 올려, 모든 공격에서 실제 피해가 증가하는지를 확인하는 방식으로 바꿨습니다.

 

 

 

결국 테스트의 기준이

 

“뭔가 강해진 것 같다”

 

가 아니라

 

“계산한 값과 실제 체력 감소량이 일치하는가” 로 바뀐 것입니다.

 

코드가 오류 없이 실행되거나 Lore에 숫자가 표시되는 것만으로는 더 이상 완료라고 판단하지 않게 됐습니다.

 

 

 

 

 

두 번의 실패 끝에 구현 방식 자체를 바꾸게 됐다

처음 공격력이 적용되지 않았을 때는 작은 코드 오류 몇 개만 수정하면 끝날 것이라고 생각했습니다.

 

하지만 실제로는

 

첫 수정


→ 다시 테스트
→ 여전히 피해 미적용

 

두 번째 수정과 디버그 추가


→ 계산값은 정상
→ 실제 피해 적용은 여전히 실패
라는 과정을 거쳤습니다.

 

 

그리고 이 과정을 통해 문제의 핵심이 단순한 계산 공식이 아니라 계산된 값을 언제, 어떤 방식으로 게임의 실제 피해에 반영하는가에 있다는 것을 확인했습니다.

 

그래서 세 번째 시도에서는 기존 구조를 계속 덧붙여 고치기보다 피해가 적용되는 흐름 자체를 다시 설계했습니다.

그리고 이 세 번째 방식에서는 이전과 전혀 다른 방식으로 다시 테스트해볼 수 있는 구조까지 만들게 됐습니다.

 

다음 글에서는 세 번째 시도에서 실제 공격력과 치명타가 어떻게 정상적으로 적용되기 시작했는지, 그리고 여러 번 수정한 끝에 처음으로 성공했다고 판단할 수 있었던 결과를 정리해보려고 합니다.