AI로 구현하기

두 번의 실패 끝에 마인크래프트 BE 도구 품질 시스템은 어떻게 정상 작동하게 됐을까?

도안 2026. 9. 27. 22:00

 

앞선 글에서는 공격력 특성이 실제 전투에 적용되지 않는 문제를 해결하기 위해 두 번의 수정과 테스트를 반복한 과정을 정리했습니다.

 

처음에는 계산식 자체가 문제라고 생각했지만, 디버그를 추가해 확인해보니 공격력과 치명타에 필요한 계산값 자체는 내부에서 만들어지고 있었습니다.

문제는 계산된 값을 실제 마인크래프트의 피해에 어떤 시점에서 적용하느냐에 있었습니다.

 

그래서 세 번째 수정에서는 기존처럼 기본 피해가 들어간 뒤 추가 피해를 덧붙이는 방식을 버리고, 공격이 적용되기 전에 최종 피해량을 계산해 원래 공격의 피해 자체를 바꾸는 방식으로 구조를 변경했습니다.

 

그리고 이 세 번째 시도에서 처음으로 실제 전투 결과가 기획했던 방향대로 움직이기 시작했습니다.

 

 

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

앞선 글에서는 처음 만든 마인크래프트 BE 도구 품질 시스템을 실제 월드에서 테스트하면서 한 가지 큰 문제를 확인했습니다.품질이 결정되고, 아이템 이름에 수식어가 붙고, Lore에 특성이 표시

buildtheidea.tistory.com

 

 

 

 

세 번째 시도에서 드디어 공격력 증가가 실제 피해에 적용됐다

세 번째 수정에서 가장 먼저 확인한 것은 가장 기본적인 공격력 +n 특성이었습니다.

이전 버전에서는 Lore에 공격력 +2라고 표시되고 내부 계산 결과도 증가했지만, 실제 몹이 받는 피해에는 제대로 반영되지 않았습니다.

 

이번에도 실제 몹의 체력 변화를 기준으로 다시 테스트했습니다.

기본 피해를 확인한 뒤 공격력 +2가 붙은 검으로 공격했을 때, 실제 몹의 체력이 그만큼 더 감소하는지를 확인했습니다.

결과는 이전과 달랐습니다.

 

이번에는 Lore에 표시된 공격력 증가가 실제 전투 피해에도 반영됐습니다.

몹이 받는 피해가 적용된 모습

 

 

디버그에서도 기본 피해와 고정 공격력, 최종 피해가 구분되어 표시됐고 실제 체력 감소량 역시 계산값과 맞아떨어졌습니다.

두 번의 수정 동안 계속 막혀 있던 가장 기본적인 문제를 처음으로 해결한 순간이었습니다.

 

 

 

 

공격력 비율도 실제 계산값대로 작동하기 시작했다

고정 공격력만 정상화된 것으로는 충분하지 않았습니다.

품질 시스템에는 공격력 +12%처럼 비율로 피해를 증가시키는 특성도 있기 때문입니다.

 

이 기능은 이전 구현에서 특히 문제가 많았습니다.

 

예를 들어 기본 피해가 4일 때 공격력 +12%라면

4 × 1.12 = 4.48 이 되어야 합니다.

 

 

하지만 이전 수정 과정에서는 소수값을 반올림하면서 증가분이 사라지는 문제가 있었습니다.

세 번째 수정에서는 이런 소수값을 그대로 유지하도록 했고, 고정 공격력을 먼저 계산한 뒤 공격력 비율을 적용하는 순서도 명확하게 정했습니다.

 

예를 들어

 

기본 피해 4
공격력 +2
공격력 +20%

 

가 동시에 존재한다면

(4 + 2) × 1.20 = 7.2 처럼 계산됩니다.

 

 

이번 테스트에서는 이런 비율 공격력 역시 실제 피해 결과에 정상적으로 반영되는 것을 확인할 수 있었습니다.

즉 공격력 증가 기능이 단순히 Lore에 존재하는 숫자가 아니라 실제 전투 계산의 일부로 동작하기 시작한 것입니다.

 

 

 

치명타 확률과 치명타 피해도 실제 전투에 연결됐다

공격력 다음으로 확인한 것은 치명타였습니다.

품질 시스템에서는 치명타를 하나의 고정 기능으로 넣는 것이 아니라

 

치명타 확률
치명타 피해

 

두 특성으로 나누어 구성했습니다.

 

 

이전 버전에서도 디버그 화면에서는 치명타 성공과 실패를 판정하고 있었습니다.

하지만 당시에는 기본 공격력 보정부터 실제 피해에 적용되지 않았기 때문에 치명타 계산이 제대로 된 전투 결과로 이어지는지는 확실하게 확인하기 어려웠습니다.

 

세 번째 수정 이후에는 상황이 달라졌습니다.

공격력 계산이 실제 피해에 정상적으로 연결되면서, 치명타 역시 성공했을 때 최종 피해량이 증가하는 것을 확인할 수 있었습니다.

 

결국

 

기본 피해

↓

고정 공격력

↓

공격력 비율

↓

치명타 판정

↓

치명타 피해

 

순서로 계산되는 전체 전투 흐름이 처음으로 실제 게임 안에서 연결된 것입니다.

 

 

 

성공한 뒤 새로운 문제가 하나 보였다

그런데 핵심 전투 기능이 정상적으로 작동하기 시작하면서 오히려 이전에는 보이지 않던 문제가 하나 새롭게 드러났습니다.

 

치명타 특성이 없는 검에서도 치명타가 발생하고 있었습니다.

 

예를 들어 아이템의 특성이

공격력 +3

 

하나뿐이라면 당연히 이 검에서는 공격력만 증가해야 합니다.

 

 

그런데 실제 전투에서는 이 검에도 숨겨진 치명타 확률과 치명타 피해가 적용되고 있었습니다.

처음에는 이전 아이템의 값이 남아 있거나, 현재 들고 있는 검의 정보가 제대로 갱신되지 않는 문제가 아닐까 생각할 수도 있었습니다.

 

 

하지만 다시 분석해보니 원인은 다른 곳에 있었습니다.

 

 

 

 

기본 치명타 수치가 모든 검에 자동으로 적용되고 있었다

당시 전투 시스템에는 치명타 기능을 작동시키기 위한 기본값이 존재했습니다.

예를 들어 치명타 피해 특성만 있는 검도 실제 의미를 가지려면 어느 정도의 기본 치명타 확률이 필요하고, 반대로 치명타 확률 특성만 있다면 치명타가 발생했을 때 사용할 기본 치명타 피해가 필요합니다.

 

문제는 이 기본값이 치명타 특성이 없는 검에도 무조건 적용되고 있었다는 것입니다.

그래서 실제 아이템에 치명타 관련 특성이 하나도 없어도 내부에서는 자동으로 치명타 시스템이 활성화되고 있었습니다.

 

이건 품질 시스템의 기본 의도와 맞지 않았습니다.

아이템의 Lore에 존재하지 않는 특성이 실제 전투에서 별도로 적용되어서는 안 되기 때문입니다.

 

그래서 다시 한 번 조건을 명확하게 정리했습니다.

 

 

 

 

치명타 특성이 있을 때만 치명타 시스템을 활성화했다

마지막 수정에서는 먼저 현재 검에 치명타 관련 특성이 실제로 존재하는지를 확인하도록 했습니다.

 

치명타 확률과 치명타 피해가 모두 없다면

치명타 시스템 자체를 완전히 끄는 방식으로 변경했습니다.

 

반대로 둘 중 하나라도 존재한다면 해당 특성이 실제 의미를 가질 수 있도록 필요한 기본값만 사용하도록 했습니다.

 

예를 들면 다음과 같습니다.

 

치명타 특성이 없는 검

→  치명타 확률 0
→  치명타 피해 0
→  치명타 발생 없음

 

치명타 확률만 있는 검

→  아이템의 치명타 확률 사용
→  기본 치명타 피해 사용

 

치명타 피해만 있는 검

→  기본 치명타 확률 사용
→  아이템의 치명타 피해 사용

 

두 특성이 모두 있는 검

→  두 특성의 실제 수치만 사용

 

여기서 중요한 점은 기본값을 무조건 더하지 않는 것입니다.

 

예를 들어 치명타 확률 +10%가 붙었다고 해서 기본 5%를 더해 15%로 만드는 것이 아니라, 치명타 확률 특성이 존재한다면 그 확률값에 기본 확률을 다시 더하지 않도록 했습니다.

 

치명타 피해 역시 마찬가지였습니다.

 

 

 

 

마지막 수정으로 아이템에 존재하는 특성만 적용됐다

이 조건까지 수정한 뒤 다시 테스트했습니다.

이번에는 공격력 특성만 있는 검에서는 공격력만 적용됐고, 치명타는 발생하지 않았습니다.

 

치명타 확률이 있는 검에서는 해당 확률로 치명타가 발생했고,

치명타 피해 특성이 있는 검 역시 기본 치명타 확률에 따라 치명타가 발생했을 때 실제 피해량 증가로 연결됐습니다.

 

공격력 비율 역시 이전처럼 정상적으로 적용됐습니다.

 

즉 처음 목표로 했던

아이템에 표시된 특성만 실제 전투에 적용되는 구조를 만들 수 있게 됐습니다.

 

처음에는 단순히 Lore에 적힌 공격력 숫자 하나를 실제 피해에 연결하는 작업처럼 보였습니다.

 

하지만 실제로는

 

피해가 적용되는 시점,
고정 공격력과 비율 공격력의 계산 순서,
소수점 처리,
치명타 활성화 조건,
치명타 기본값의 사용 범위

 

까지 하나씩 구분해야 했습니다.

 

 

 

 

 

여러 번의 실패가 테스트 방법도 바꿨다

이번 작업을 진행하면서 구현 방식뿐 아니라 테스트하는 방법도 많이 바뀌었습니다.

처음에는 검으로 직접 공격해보고 체력이 대충 더 많이 줄어드는지를 확인했습니다.

 

하지만 수정이 반복되면서 이 방식만으로는 어느 부분이 잘못됐는지 찾기 어려웠습니다.

 

그래서 디버그 화면에

 

기본 피해,
고정 공격력,
공격력 비율,
치명타 확률,
치명타 피해,
최종 피해

 

 

같은 값을 직접 표시했습니다.

 

 

 

그 결과

계산은 정상인데 실제 피해가 틀린 경우와 계산 자체가 잘못된 경우를 구분할 수 있었습니다.

 

치명타처럼 확률이 들어가는 기능도 테스트할 때는 일시적으로 확률을 크게 올려 기능 자체가 정상인지 먼저 확인하는 방식으로 바뀌었습니다.

 

이번 구현에서 실제 코드를 고치는 것만큼 중요했던 것이 바로 이 테스트 방법이었습니다.

 

 

 

 

세 번째 시도에서 처음으로 전투 시스템의 기본 구조를 완성했다

처음 구현한 품질 시스템에서는 품질 생성과 이름, Lore까지는 비교적 빠르게 원하는 결과를 확인할 수 있었습니다.

 

하지만 그 안에 표시된 능력치를 실제 게임에 적용하는 것은 훨씬 어려웠습니다.

첫 번째와 두 번 수정에서는 계산식과 추가 피해 처리 방식을 계속 손봤지만 실제 피해까지 연결하지 못했습니다.

 

결국 세 번째 시도에서 추가 피해를 나중에 덧붙이는 방식을 버리고 공격이 적용되기 전에 최종 피해를 먼저 계산하는 방식으로 바꾸면서 핵심 문제가 해결됐습니다.

 

그리고 마지막으로 치명타 활성화 조건까지 수정하면서 아이템에 실제로 존재하는 특성만 전투에 적용되도록 만들 수 있었습니다.

처음 기획했던 품질 시스템의 모든 기능이 이 단계에서 끝난 것은 아니었습니다.

 

하지만 적어도

품질에 따라 서로 다른 전투 특성이 붙고, 그 특성이 실제 게임의 피해량까지 변화시키는 기본 구조

는 이 시점에서 처음으로 정상적으로 작동하기 시작했습니다.

 

여러 번의 수정 끝에 처음 구현하려고 했던 도구 품질 시스템이 단순히 화면에 정보를 보여주는 단계를 넘어, 실제 플레이에 영향을 주는 시스템으로 연결된 것입니다.