
숫자를 보여주면 어디까지 믿어도 되는지도 알려야 한다
Ice Breaker의 1.6.0 개발에서 얼음 위에 현재 HP를 표시하고, 조준 중 처음 맞을 대상의 예상 피해를 붙였다. HP만으로는 벽 충전 능력이 이번 조준에 적용되는지 알기 어려웠다. 반대로 화면에 “4회”만 적으면 공 네 개가 맞는 순간 반드시 깨진다는 약속처럼 읽힌다. 연쇄나 충전 소모가 있는 게임에서는 그 약속이 틀릴 수 있다.
그래서 안내를 대상 HP, 첫 직격 피해, 동일 피해 기준 타수로 나눴다. 본문 화면은 HP 4인 얼음에 첫 직격 1, 동일 피해 기준 4회를 표시한다. 벽 충전 능력을 가지고 있어도 그 조준 경로에서 측벽 반사가 검출되지 않으면 보너스를 더하지 않는다.
첫 대상 검색은 한 번의 측벽 반사까지만
병합된 GameSession은 Physics2D.RaycastAll 결과를 거리순으로 검사한다. trigger를 건너뛰고 IceBlock을 만나면 그 대상을 반환한다. 먼저 만난 장애물이 WallLeft 또는 WallRight일 때만 법선으로 방향을 반사해 두 번째 검색을 한다. 다른 장애물을 만났다고 그 너머의 얼음을 임의로 선택하지 않는다.
첫 검색 길이는 40 Unity 단위다. 반사 뒤에는 충돌점에서 반사 방향으로 0.02만큼 옮겨 다시 쏘고, 남은 검색 길이를 사용한다. 이 값들은 이 게임의 보드에서 사용한 값이다. 다른 크기의 프로젝트에 그대로 붙여 넣을 공통 상수는 아니다. RaycastAll과 Vector2.Reflect의 API 역할은 아래 공식 문서에서 확인할 수 있다.
두 번째 검색까지 얻은 대상은 한 번의 측벽 반사를 고려한 조준 안내다. 이후 여러 벽을 튕기거나 다른 공이 먼저 얼음을 깨는 상황까지 시뮬레이션한 결과는 아니다.
계산식보다 조건을 먼저 고정한다
현재 소스의 첫 피해는 기본값 1에 첫 직격 보너스를 더하고, 조준 검색에서 측벽 반사가 확인됐을 때 벽 충전 보너스를 더한다. 타수는 그 피해가 매번 같다고 가정한 올림 나눗셈이다.
위 표기는 설명용 의사코드다. 프로젝트의 EstimateUniformDirectHits는 HP가 0 이하면 0을 반환하고, 피해 입력은 최소 1로 취급한다. 작은 양의 정수 HP를 쓰는 이 구현을 모든 정수 범위에 안전한 공용 계산기로 확대하지는 않았다.
남아 있는 규칙 테스트에는 HP 7/피해 2 → 4회, HP 8/피해 2 → 4회, HP 9/피해 2 → 5회가 들어 있다. 피해 0은 이 프로젝트 정책대로 피해 1로 계산한다. 피해 0을 무적이나 타격 불가로 쓰는 게임이라면 “계산 불가” 표시가 필요하므로 이 정책부터 바꿔야 한다.
firstDamage = 1 + firstStrikeBonus
+ (bouncedSideWall ? wallChargeBonus : 0);
sameDamageHits = ceil(targetHp / firstDamage);독자가 확인할 작은 재현 순서
이 순서는 다른 프로젝트에서 따라 해 볼 확인 절차이며 여기서 새로 실행했다는 뜻은 아니다. 9월 8일 기록의 EditMode 16/16, PlayMode 30/30과 후속 그래픽 fixture 1/1은 서로 다른 실행이다. 그래픽 fixture 화면을 다시 읽어 문구와 소스를 대조했고, 일반 입력으로 승리하거나 Android 터치가 정상이라는 결론은 내리지 않았다.
- 다른 보너스를 끈 상태에서 HP 4인 첫 대상에 조준하고 HP 4 / 첫 피해 1 / 4회가 맞는지 확인한다.
- 같은 대상에 측벽을 한 번 거치는 경로를 만들고 반사 검출과 보너스 포함 문구를 따로 확인한다.
- 보너스 능력을 보유한 채 직선 경로로 바꾸면 보너스가 빠지는지 확인한다.
- target이 없거나 카드 선택 중이면 이전 대상의 안내가 남지 않는지 확인한다.
- 실제 발사 뒤 충전 소모·다른 공·연쇄로 결과가 달라질 때 안내를 전체 발사 예측으로 읽게 만드는 문구가 없는지 확인한다.
첫 계산을 작게 유지한 이유
목표는 조준 한 번에서 무엇이 달라지는지 읽게 하는 것이었다. 예측을 늘리기 전에 표시한 숫자의 가정을 플레이어가 볼 수 있게 했다. 더 긴 반사 경로를 지원하려면 검색 횟수만 늘릴 것이 아니라 공의 크기, 이동 중 표적 변화, 충전 소모까지 실제 발사와 대조해야 한다. 이 기록은 PR #40의 구현 범위에 한정하며 이후 게임 개편이나 출시 완료를 설명하지 않는다.
기존 실행기록·소스 대조
검증일
검증 환경Unity 6000.5.3f1 · Windows Editor · September 8 retained EditMode/PlayMode receipts and camera-texture captures; source review on September 21
Ice Breaker PR #40의 병합 소스, 2026년 9월 8일 Unity 6000.5.3f1 시험 XML과 기존 실행 캡처를 대조했다. 글 작성 중 게임을 새로 실행하지 않았다. 캡처는 640×480 Editor 실행에서 임시 ScreenSpaceCamera Canvas와 1080×1920 카메라 텍스처로 얻었다. Android 실기기 조작·소리·난이도 또는 현재 스토어 공개 상태를 검증한 결과가 아니다.