docs: record playground behavior and Editor validation scope

This commit is contained in:
NINI
2026-10-11 23:16:27 +09:00
parent b438ee266b
commit 13822905d3
20 changed files with 158 additions and 12 deletions
+6
View File
@@ -29,3 +29,9 @@ flowchart LR
카메라·선택·연출은 같은 수명을 갖지 않는다. 카메라 조작의 확정값은 저장으로 넘어가지만 분리 선택과 끌기 중간 위치는 입력 계층 안에 남는다. 연출은 상태에서 재생성하며, 화면 전환과 일시 정지에서 미리보기·지난 음성을 정리한다. 같은 보드의 성공 전이에서는 숫자 큐를 유지하므로 학습 발화 완료와 게임 성공은 서로 기다리지 않는다.
컴파일 방향은 UnityRuntime → Core, Editor → Core·UnityRuntime이다. 의존성은 시작 지점에서 직접 연결하고 화면·제스처는 명시적 상태로 표현한다. 이 규모에서는 범용 DI 컨테이너·전역 이벤트 버스·MVVM·ECS를 전제로 하지 않는다.
입력 계층의 환경 판정은 실제 지면·큰 소품·유한한 경계를 사용한다. Presenter가 묶음의 동일한 이동량을 마지막 안전 위치까지 제한한 뒤 Core에 확정 의도를 전달한다. 합체 접촉 보정, 분리 양쪽과 공급도 같은 환경 판정을 거친다. 충돌체나 카메라는 수학 목표를 소유하지 않는다.
끌기 시점 보조는 입력 계층의 임시 상태다. 입력은 현재 렌더 카메라와 실제 잡은 구 표면을 기준으로 이동량을 계산하며, 카메라 변화만으로는 이동량이 생기지 않는다. 놓기·취소에서 보조를 정리하고 확인된 수동 시점으로 돌아간다. 수동 시점만 진행 저장으로 전달한다.
이어하기 진입은 UnityRuntime의 환경 검사 → 분리된 후보 보드 준비 → Core의 ID·소속·기록 검증 → 저장 한 번 → 화면·확정 보드 교체 순서다. 가능한 보정은 위치만 바꾸고 일반 놀이 이동을 호출하지 않는다. 유효 배치가 없다는 판정에서만 해당 보드를 처음 배치로 되돌린다. 준비·검증·쓰기 실패에는 이전 확정 상태를 유지한다. 승인 메시에서 추출한 읽기 전용 충돌 형상은 런타임 복원 판정용 자산이며, 제작 모델 가중치나 QA 도구와 구분한다.
+9 -1
View File
@@ -1,5 +1,13 @@
# 첫 퍼즐 자산 등록
## 현재 지면·여섯 풍경 적용 (2026-10-11 KST)
원래 승인 원본·FBX·재질·얼굴·음성·글꼴 455개 파일과 기존 메타데이터를 보존하고 자연 프리팹의 충돌 연결과 30개 시각 배치만 갱신했다. 접근 가능한 지면·큰 나무·바위·아치·계단은 실제 메시 MeshCollider를 사용한다. 작은 풀·꽃·양치식물과 먼 배경은 이동을 막지 않는다. 원래 숨은 바닥 Collider를 제거해 보이는 지면과 판정 표면을 맞췄으며 가져온 root 회전과 실제 메시 바닥으로 소품을 접지했다.
다섯 번호씩 꽃 초원·나무 쉼터·꽃 언덕·양치식물 숲·바위 정원·돌 아치 계곡을 고정 조합과 배치 변형으로 구성했다. 새 외형 모델·재질을 채택하거나 승인 바이트를 재생성하지 않았다. `UnityRuntime/Bootstrap/PlaygroundRestoreGeometry.asset`은 승인 충돌 메시의 읽기 전용 파생 형상이며 원본·meta·형상 해시를 함께 갖는다. 눈에 보이는 새 미술 자산이나 플레이 저장 필드가 아니다.
현재 출처·보존 대조·실제 화면·APK 연결은 `artifacts/verification/PlaygroundInteraction/`에 있다. 아래 2026-10-09의 세 테마·숨은 바닥·카메라 제한 미적용 설명은 당시 제품 이력이며 현재 접지·충돌·시점 동작을 뜻하지 않는다.
기록일: 2026-10-05. 이 표는 첫 퍼즐 범위이며 최종 캐릭터·세 배경 테마·효과음·음악 완성을 뜻하지 않습니다.
| 자산 | 실제 경로 | 제작·출처와 조건 | 상태와 검증 |
@@ -56,7 +64,7 @@ Stage06/10/14 ScriptableObject와 GameApp의 대표 선택·나누기·취소
Editor RT 캡처는 Camera.Render와 임시 ScreenSpaceCamera Canvas/안전영역 시뮬레이션 후 복원한 결과이며 Android 기기 화면과 구별한다. JSON은 raw CameraState, 실제 transform/FOV/pivot, 화면·Canvas·viewport 및 측정 범위를 기록한다. editorUnityStatsDrawCalls는 UnityEditor.UnityStats.drawCalls의 해당 Editor frame 관찰값이다. GameView/SceneView 귀속을 이 API만으로 확정할 수 없어 RT GPU draw/overdraw나 제품 draw call 합격으로 취급하지 않는다. Camera.Render wall time은 Editor 비용이며 AVD/실기기 프레임 합격 증거가 아니다. 0/미측정 값을 합격으로 취급하지 않는다.
## 승인 모델 적용 상태 (2026-10-09 KST)
## 이전 승인 모델 적용 상태 (2026-10-09 KST)
2026-10-08 KST 사용자가 다섯 모델 묶음의 검수 갤러리를 확인하고 “승인합니다”라고 답했다. 승인 범위는 Blender 원본 2개와 FBX 23개의 정확한 바이트이며 최종 제품 전체의 새 사용자 승인을 뜻하지 않는다. [모델 승인 원문](../artifacts/verification/VisualUpgrade/ModelReview/user-approval.json)과 [검수 갤러리](../artifacts/verification/VisualUpgrade/ModelReview/index.html)를 보존한다.
+12
View File
@@ -46,3 +46,15 @@ N개에서 선택 수가 1~N-1일 때만 나눌 수 있다. 0개·전체·다른
마지막 확정 구 위치·소속·수집·계수·카메라와 본 시범 기록을 복원한다. 임시 선택·드래그·변신 중간 프레임은 복원하지 않는다. 재실행은 시작 화면으로 들어가 아이가 퍼즐 또는 자유 놀이를 선택하며 지난 계수·축하를 반복하지 않는다. 손상 저장을 부분적으로 읽지 않고 유효본 전체로 복구한다. 복구할 유효본도 없으면 알림과 초기 상태를 제공하고 손상 원본은 보존한다.
계수는 즉시 확정하고 숫자 발화는 순서대로 이어 재생한다. 안내가 숫자 발화를 끊거나 뒤로 밀지 않는다. 같은 보드에서 성공해도 마지막 숫자를 끝까지 들려주며 소리 때문에 성공·새 조작을 지연하지 않는다. 화면 이동·일시 정지에는 이전 발화를 정리한다. 숫자·강조·표정으로도 정보를 전달해 소리만으로 풀이를 요구하지 않는다.
## 지면·큰 소품·시점과 이어하기
자석의 공중 이동을 유지하며 중력·낙하를 추가하지 않는다. 반지름 0.5인 어느 구라도 땅·큰 나무·바위·아치·계단 또는 옆·앞뒤·위 경계를 통과하려 하면 묶음 전체가 경로의 마지막 안전 위치에서 멈춘다. 방향을 바꾸면 그 위치에서 계속 끌 수 있다. 작은 풀·꽃·양치식물은 통과하며, 보이는 아치 구멍은 열린 채로 남는다. 초기 구 위치와 수학 목표를 장애물에 맞춰 바꾸지 않는다.
놓기는 안전한 미리보기와 같은 위치를 확정한다. 접촉 보정도 장애물을 넘지 않으며 실제 3D 접촉과 안전한 배열이 있을 때만 합체 후보가 된다. 분리한 양쪽이 안전하지 않으면 전체 확정을 거부한다. 공급할 안전 공간이 없으면 구를 만들지 않는다. 앞 소품의 첫 hit를 무시해 뒤 구를 잡지 않는다. 화면 밖 놓기·취소·pause·화면 전환·핀치 전환은 확정 보드로 돌아간다.
실제로 끌기 시작할 때 이동 친구와 가까운 상대의 깊이를 보여 주는 시점으로 부드럽게 조정한다. 비슷한 후보 사이를 매 프레임 왕복하지 않고, 가까운 상대가 없으면 이동 친구와 주변을 보여 준다. 탭·계수·선택만으로는 시점 보조가 시작되지 않는다. 손가락이 정지하면 카메라가 움직여도 구는 이동하지 않는다. 놓기·취소 후 끌기 전 수동 시점으로 복귀하며 자동 보조·복귀 중간값은 저장하지 않는다. 빈 곳 회전과 핀치는 유지하되 시점이 땅 아래나 큰 지형 내부로 들어가지 않도록 제한한다.
새 지형과 겹치거나 경계 밖인 이어하기는 각 묶음의 모양을 유지하는 동일한 평행이동으로 가능한 가장 가까운 안전 위치에 보정한다. 현재 위치가 안전하면 그대로 둔다. 보정은 ID·총량·소속·수집·계수·완료·해금·시범과 다른 슬롯을 보존하고 새 수집·계수·성공을 만들지 않는다. 전체 결과를 검사한 뒤 한 번 저장하고, 다시 열 때 안전한 보정을 반복하지 않는다.
모양을 유지한 유효 배치가 없으면 문제된 이어하기 하나만 해당 번호의 처음 배치로 되돌리고 안내한다. 퍼즐의 부분 수집·계수는 처음 상태로 돌아가며 자유 놀이는 원래 source 번호의 초기 배치와 자유 놀이 모드를 유지한다. 완료·해금·시범·다른 퍼즐·관계없는 자유 놀이를 삭제하지 않는다. 검사 오류·검색 한도 도달·쓰기 실패는 유효 배치 부재가 아니므로 초기화하지 않는다.
+14 -1
View File
@@ -1,5 +1,18 @@
# T6 고정 30개 콘텐츠
## 현재 여섯 자연 풍경 (2026-10-11 KST)
| 번호 | 풍경 | 기존 내부 테마 |
|---|---|---|
| 1~5 | 꽃 초원 | Garden |
| 6~10 | 나무 쉼터 | Garden |
| 11~15 | 꽃 언덕 | Cloud |
| 16~20 | 양치식물 숲 | Cloud |
| 21~25 | 바위 정원 | Workshop |
| 26~30 | 돌 아치 계곡 | Workshop |
승인 자연 모델을 주 소품·지형·밀도·방향의 서로 다른 고정 조합으로 배치했다. 같은 다섯 번호 안에도 변형이 있으며 재입장·재플레이·성공 후 자유 놀이에서는 원래 번호의 풍경을 사용한다. Garden/Cloud/Workshop 식별자와 저장 버전 1은 그대로다. 30개 목표·종류·초기 묶음과 원래 173개 구 ID·위치는 보존했다. 지형·큰 소품만 이동을 막고 작은 식생은 통과한다. 아래 세 테마와 지면 아래 시점 설명은 이전 제품의 제작 이력이다.
아래 제작·음성 후보·가독성 잔여는 2026-10-05 당시 구현 이력이다. 현재 시각 채택은 2026-10-09 기록, 음성은 승인 44개 active-adoption을 따른다. 당시 후속 상태를 현재 미완료로 확대하지 않는다.
R07의 1..30 초기 묶음·목표·종류를 30개 ScriptableObject로 작성했다. 수 세기는 1..5에서 N=번호, 16..20에서 N=번호−10의 분리된 1인 친구를 정확히 제공한다. 수량·구 ID·묶음 소속·수집·계수·성공은 기존 순수 C# Core가 담당한다. 모든 구성 퍼즐은 전체 최종 group multiset으로 판정하며 구의 모양, 조작 횟수와 풀이 순서를 조건으로 삼지 않는다.
@@ -24,7 +37,7 @@ T7의 AI 최종 캐릭터/UI 이미지·표정/VFX, SFX/BGM 및 아직 응답받
Android 음성 검사는 Content만 `record-native-audio.ps1`의 Android AudioRecord REMOTE_SUBMIX 무압축 stereo48k PCM16을 원시 보존하고 각 좌우 프레임의 정확한 정수 평균으로 mono48k를 만든다. 공식 scrcpy4.1 ZIP SHA `5b12172b3264b2889f4583ee64752ce832e29bc8b1089dca81093459697165db`를 검증하며 도구·서버·캐시는 ignored artifacts에만 있어 APK에 들어가지 않는다. 기존 gRPC/T5 경로와 비교기의 기본 동작은 유지한다. Content의 `-RequireFullSpeech`는 기존 전체 .95 상관과 동일 onset에서100ms/50ms 겹침의 모든 source RMS32 이상 창 .95를 함께 요구하고, 유효 창0개/불충분 자료는 실패한다. 실제 native 정상 발화와 다른 clip/앞뒤250ms 삭제/중간250ms 삭제·중복/노이즈 negative를 검사한다. gRPC 경로는 같은 APK·원본의 전체발화 불일치가 있었고 이전 T5 APK/native48/냉간부팅 교차 실패를 원시 보존했다. 내부 Android 경로의 정상 대조와 구분하며 정확한 SDK 원인을 확정하지 않는다.
## 현재 자연 테마 연결 (2026-10-09 KST)
## 이전 자연 테마 연결 (2026-10-09 KST)
승인한 영웅 2 FBX와 자연 배경 21 FBX를 실제 Unity 참조로 연결했다. Garden 1..10의 맑은 초원, Cloud 11..20의 꽃 언덕, Workshop 21..30의 바위 언덕은 자유 놀이에서도 원래 sourceStageId를 따른다. 30개 정의의 수량·ID·초기 위치·목표·종류 등 비시각 필드와 기존 GUID를 유지한다. 장비는 실제 묶음당 한 벌이며 새 장식의 배치가 정답 조건이 되지 않는다. 기존 구 탐색·직접 pick/drag·숫자 가독성 검사의 기준을 낮추지 않았다.
+6
View File
@@ -79,3 +79,9 @@ prepare는 유효 manifest를 받아 44.1kHz mono PCM16의 `edited/<runId>/`와
## 모델 내보내기
Blender의 `--background --python tools/models/build_playgrounds.py`는 저장소 루트에서 실행한다. 입력은 스크립트의 모델 정의이며 `SourceAssets/Models/PlaygroundProps.blend`와 Presentation/Models의 13개 FBX를 재작성한다. 사용자 인수를 받는 범용 모델 CLI가 아니다. Blender 실행·내보내기 오류는 비정상 종료하며 자동 성공 출력은 Unity의 방향·재질·콜라이더 검수를 의미하지 않는다.
풍경은 기존 `stageId` 또는 `sourceStageId`로 찾으며 테마·충돌 경계·자동 카메라용 JSON 필드를 추가하지 않는다. 버전 1의 필드·타입·손상 복구 계약은 그대로다. 저장 거리의 유한 양수 검증과 화면의 3~15·지면 위 시점 제한은 서로 다른 경계다. 환경상 안전한 수동 quaternion은 재입장에서 그대로 유지하고, 지면 아래나 큰 지형 내부의 시점은 구 배치와 독립적으로 보정한다.
보정 가능한 이어하기는 해당 객체의 위치·필요한 카메라만 바꾼다. 보정 불가능한 해당 객체의 한정 초기화는 그 번호의 초기 정의를 사용한다. 두 경우 모두 완료·시범·다른 객체를 보존한 전체 JSON 한 번으로 확정하며 실패 쓰기를 완료로 표시하지 않는다.
Final Android 검사는 정상 순차 진행과 별도 경계 주입을 구분하고, 충돌·끌기 시점·복원 사례의 원문 JSON·실제 입력·PNG를 남긴다. 대표 화면·가로 비율·동일 최대 수량의 자원 비교는 소스와 APK 해시에 연결한 별도 관찰 증거다. 관찰 JSON의 존재나 과거 통과를 현재 전체 Final 종료 0으로 대신하지 않는다.
+19 -1
View File
@@ -29,7 +29,7 @@
- Blender FBX의 root 회전을 제거하면 소품이 눕는다. 승인 몸체의 실제 import root X는 약 89.98도, 자연 소품은 90도이며 장비는 0도다. 제작 원본 m·Z-up, 내보내기 -Z forward·Y-up, Unity import scale 1·bakeAxisConversion을 유지하고 wrapper 아래 원래 root를 보존한다. 얼굴 평면을 장비 중심으로 쓰면 장비가 구 앞에 뜨므로 대표 구 중심으로 되돌려 배치한다.
- 아치 전체를 BoxCollider로 감싸면 보이는 구멍도 Raycast를 막는다. 실제 아치 메시의 MeshCollider로 구멍을 보존하고 뒤쪽 자석을 선택할 수 있는지 확인한다.
- 투명 얼굴 PNG는 일부 뷰어에서 alpha 0 픽셀의 RGB가 파란 배경처럼 보인다. 원본 alpha와 실제 Unity 구 표면의 가장자리를 함께 확인한다. 현재 v2는 도구 편집 결과 자체를 채택했고 별도 래스터 변환 없이 런타임 파일과 같은 바이트를 유지한다.
- 글꼴 이름의 `FirstSlice`는 과거 이름이며 현재 전체 한국어를 포함한다. 이름만 보고 다시 만들면 승인된 화면과 자산 GUID가 달라질 수 있다. 실제 glyph와 static atlas를 검사하고 새 문구의 누락만 보완한다.
- 글꼴 이름의 `FirstSlice`는 과거 이름이며 현재 실제 UI에서 사용하는 한국어 glyph를 포함한다. 이름만 보고 다시 만들면 승인된 화면과 자산 GUID가 달라질 수 있다. 실제 glyph와 static atlas를 검사하고 새 문구의 누락만 보완한다.
- Blender 재질 기록의 `linearBaseColor`를 Unity `_BaseColor`에 그대로 넣으면 의도한 팔레트와 달라진다. 실제 채택은 `baseColorSrgb`/`authoredSRGB`를 사용하고 URP의 색 공간 변환에 맡겼다. 거칠기는 smoothness=1−roughness, 금속성은 원본 값을 사용하며 승인 메시·팔레트를 다시 제작하지 않는다.
- Light의 Soft 설정만 바꿔도 URP의 soft 지원이 꺼져 있으면 실제 그림자가 나오지 않는다. 현재 Sun은 따뜻한 색 (1, .97, .91), 강도 1.3·Soft strength .55이며 URP는 1024·1 cascade·Low soft·거리 30이다. 실제 같은 보드의 shadow-off/soft-shadow 화면 대조로 확인했다. 설정 존재만으로 렌더 결과를 통과로 쓰지 않는다.
@@ -43,3 +43,21 @@
초기 자산 builder는 현재 완성된 씬·스테이지·얼굴·음성 참조를 재작성할 수 있다. `ProjectBootstrap.Prepare/ConnectApp`, `CompositionAssets.Build`, `PersistenceAssets.Build`, `ContentAssets.Build`, `PresentationAssets.Build`를 정상 프로젝트 열기·검사 전 준비 작업으로 실행하지 않는다. 변경 대상과 생성 diff를 먼저 확인하고 승인된 기존 자산을 보존할 수 있을 때만 사용한다.
로컬 Qwen 환경의 설치·import, GPU 연산, 모델 로딩, 실제 생성, 파일 검수, 청취 승인은 각각 다른 확인이었다. 이미 승인된 44개는 재생성할 이유가 없으며 같은 seed가 다른 환경에서 같은 WAV 바이트를 보장하지 않는다. 새 후보는 원본 이력과 입력 snapshot을 유지하고 승인 파일과 혼합하지 않는다.
## 새 지형·끌기와 실제 입력 관찰
- 승인 FBX는 런타임에서 정점 읽기가 꺼져 있다. Read/Write나 import root를 바꾸면 승인 메타데이터 경계를 깨뜨리므로 Editor의 읽기 전용 메시 접근으로 정점·삼각형을 추출하고 원본·meta 해시와 함께 복원 판정 자산에 저장했다. 메시 자체를 다시 제작하지 않는다.
- 얇은 지면 테두리가 화면에서 틈처럼 보일 수 있다. 실제 형상 검사에서는 약 3mm의 연결된 측벽과 인접 면의 12mm 겹침이었다. 그림이나 한 픽셀만으로 공중 틈이라 단정하지 않고 실제 메시·같은 시점 확대 화면을 대조한다.
- 터치가 다른 장치의 `MakeCurrent`보다 먼저 시작했을 때 첫 Began 소유자를 놓치면 앱은 끌기를 받지 못한다. 활성 접점을 소유자 기준으로 처리하고 외부 장치 입력을 먼저 거부했다. 구 중심이 아니라 첫 hit의 잡은 표면을 유지하며 매 이동을 현재 카메라에 재투영해야 보조 회전이 구의 깊이 점프로 바뀌지 않는다.
- 네이티브 저장은 Unity float32가 JSON 숫자로 직렬화된 결과다. 더 높은 정밀도의 fixture quaternion이나 속성 순서를 그대로 비교하면 의미가 같은 시점도 실패한다. 실제 저장 정밀도·필드 순서로 준비하고 1 ULP 변이·ID·소속·계수 변화의 부정 대조는 계속 거부한다.
- Editor가 내보낸 native fixture의 `sourceDirty`는 문자열 `False`다. PowerShell에서 비어 있지 않은 문자열을 `[bool]`로 변환하면 true가 되므로 명시적으로 문자열을 대조하거나 boolean 파싱을 사용한다. 복원 fixture의 `editorEntryMilliseconds`는 입력 상태가 아니라 실행마다 달라지는 측정 출력이므로 입력 동일성 검사는 그 값만 제외하고 원래 측정값은 별도로 보존한다.
- 저장 파일이 준비돼도 앱 화면이 아직 시작되지 않았을 수 있다. 앱 PID와 실제 금색 버튼 화면까지 확인하고 제한 시간 내 화면이 준비되지 않으면 실패한다. 같은 저장을 읽었다는 사실만으로 입력 준비 완료를 주장하지 않는다.
- 파란 자석을 찾는 연결 픽셀 검사는 청록색 먼 언덕까지 붙일 수 있었다. 색 범위·연결 성분과 실제 PNG를 대조했고, 정수 인수를 받는 `Math.Min`에 소수 비율을 넣어 0이 되는 문제는 `1.0` 같은 부동 소수 한도로 고쳤다. PowerShell 좌표 배열에서 쉼표와 산술식을 섞을 때는 각 좌표를 괄호로 감싼다.
- 새 시점 보조 중 500ms의 보간 swipe는 오래된 화면 좌표를 계속 사용할 수 있다. 현재 투영으로 DOWN·한 MOVE·700ms 정지·UP을 보내 실제 저장과 접촉을 검사했다. 원래 낮은 구의 직선 경로가 큰 장식에 막히면 실제 위쪽 우회와 저장 후 재투영을 사용한다. 각도 간격이 큰 회전은 좁은 깊이 접촉 창을 건너뛰므로 20px로 실제 14px 끌기 문턱을 넘은 뒤 같은 접점을 8px 최종 이동량으로 되돌리는 작은 수동 회전을 사용했다. Stage18의 약 1.9846도 실제 저장 변화는 별도 경계 재현이며 정상 30개 진행을 대신하지 않는다.
- 다른 구의 구체만 확인하는 투영 검사는 앞 소품의 첫 hit를 알 수 없다. 실제 자석 위치가 그대로이고 수동 시점만 바뀐 시도는 성공한 끌기로 세지 않는다. 현재 저장·화면으로 실제 입력 종류를 구분하고 다시 찾으며, 구가 이동한 결과에는 정확한 ID·묶음의 동일 이동·다른 구 불변·수동 시점 보존·실제 3D 접촉 검사를 유지한다.
- 정확히 같은 보드로 끝난 놓기는 합체가 아니다. 전체 저장도 변하지 않았음을 확인한 뒤 실제 상승 우회를 재시도하고 새 저장으로 투영을 갱신한다. 우회에서도 계수·다른 슬롯·완료·시범 기록, 원래 ID·묶음 모양·상대 위치·수동 시점과 실제 접촉 검사를 유지한다. 탐색 상한이나 접촉 허용 오차를 늘려 실패를 합격으로 바꾸지 않는다. 원문 실패 배치를 주입한 부분 재현과 새 저장으로 수행한 정상 30개 진행은 별도 증거다.
- 새 나무를 360도 둘레에 놓은 첫 배치는 일부 초기 자석·숫자·상단 UI를 가렸다. 초기 배치를 바꾸지 않고 뒤·옆으로 나무를 옮겼다. 30개 보드·두 가로 비율에서 구 346개·숫자 174개·상단 UI 표본 720개의 새 나무 첫 hit 가림이 330건에서 0건으로 줄었다. 원래 자석끼리의 겹침이나 아치의 탐색 역할을 모든 시점 무가림으로 확대하지 않는다.
- 최대 10개 자석의 자원 비교는 같은 AVD·카메라·수량·개별/한 묶음 상태, 8초 예열 뒤 20초 요청한 조용한 화면에서 수행했다. FPS와 PSS는 실제 화면 프레임·메모리 원문을 파싱한다. P90/P99는 histogram 구간 상한의 추정이며 입력 지연이 아니다. Editor Render 시간·전체 로드 texture memory를 Android FPS로 환산하지 않는다.
- 정적 폰트는 전체 한글 유니코드를 담는 것이 아니다. 새 안내 ‘친구를 놀이터로 다시 보냈어요.’, ‘친구가 놀이터에 들어가지 못해서 처음부터 다시 시작해요.’, ‘지금은 시작하지 못했어요. 다시 해볼게요.’를 포함해 실제 사용하는 132 glyph가 승인 atlas에 있는지 확인했다. 안내 음성을 새로 생성하지 않았다.
식생을 모든 둘레 지점에 반복하면 승인 원본을 바꾸지 않아도 메시 인스턴스 비용이 커진다. 46개 경계 지점의 수평 위치·회전·크기를 유지하면서 일부 꽃·풀을 승인 자갈로 바꾸고 내부 식생 반복 수만 줄였다. 대표 여섯 번호의 환경 FBX 삼각형 합계는 이전 개선 배치 대비22~47% 줄었다. 제출 GPU 삼각형이나 FPS가 아니다. 서로 다른 날짜·호스트 부하에서 얻은 여섯 Editor Camera.Render CPU 중앙값 중 하나는 상승했으므로 전체 성능 향상이나 인과효과로 일반화하지 않는다.
+20 -1
View File
@@ -1,6 +1,25 @@
# 최종 검증 기록
## 승인 모델 적용의 최종 실행 (2026-10-09 KST)
## 지면·여섯 풍경·끌기 개선 검증 (2026-10-11 KST)
검사 소스는 `b438ee266bdda86ec40833792a004413d1182a39`, APK SHA-256은 `172A20915A9E82C06E557AFC6113189EDE659CA75CAA4A8A2FFF910E7C74CA49`다. 전체 묶음의 지면·큰 소품·경계 정지, 소품 접지, 다섯 번호씩 여섯 고정 풍경과 변형, 끌기 시점 보조·수동 복귀, 이어하기의 모양 보존 위치 보정·문제 슬롯만 초기화를 구현했다. 승인 자산455개·30개 비시각 정의·초기173개 구 ID와 위치를 보존했다.
| 실제 명령 | 결과 | 실제 종료 |
|---|---|---|
| `pwsh -NoProfile -File tools/verify.ps1 -Phase EditMode -Milestone Final` | 177/177 | 0 |
| `pwsh -NoProfile -File tools/verify.ps1 -Phase PlayMode -Milestone Final` | 112/112 | 0 |
| `pwsh -NoProfile -File tools/verify.ps1 -Phase AndroidBuild -Milestone Final` | APK 제작 | 0 |
| AndroidSmoke | 사용자 지시로 생략 | 실행하지 않음 |
사용자는 “안드로이드 기기 검증은 건너뛰겠습니다. 먼저 Unity 에디터에서 검증하세요”라고 지시했다. 현재 APK 설치·기기 실행·정상30개 Android 진행·FPS는 검증하지 않았다. 실제 세 단계 명령·로그·UTC·소스·APK 해시와 생략 범위는 `artifacts/verification/PlaygroundInteraction/completion.json`에 있다. 문서만 추가된 소스는 제품 파일 동일성으로 검사 소스에 연결하며 검사를 다시 실행한 것으로 표기하지 않는다.
현재 Main의 여섯 대표 풍경·각 다음 번호 변형을 스마트폰2400×1080·태블릿1600×1000의 기본/회전 확대 시점48장과 끌기 보조2장으로 직접 확인했다. Editor Camera.Render의 모의 가로 viewport·검수 fixture이며 Android 캡처가 아니다. 직접 관찰50개와 해시는 `EditorObservation/editor-visual-observer.json`, 화면은 `index.html`에 있다. 원래173개 구의 실제 선택·끌기·취소는 `Final/DragCapture/root-final-173-drag-proof.json`에 있다. PNG만으로 접촉·ID·성능을 판정하지 않는다.
반복 식생을 줄이고 기존 자갈을 활용해 여섯 대표 풍경의 환경 FBX 삼각형 합계를 이전 개선 배치 대비22~47% 줄였다. 여섯 Editor Camera.Render CPU 중앙값 비교 중 하나는 상승했고 측정 날짜·호스트 부하도 다르므로 전체 성능 향상·GPU 비용·기기 FPS를 주장하지 않는다. 원문은 ResourceSceneryFix/editor-resource-observations.json에 있다.
일부 아치 뒤 기사 발견성·세계 숫자 대비·수동 회전 확대의 하단 안내 겹침은 현재 관찰 제한으로 남긴다. 원래 배치를 유지하며 지원 시점의 실제 입력과 자동 끌기 여백 검사는 별도로 통과했다. 모든 시점 무가림·5~7세 가독성·실기기 성능·iOS·스토어 배포는 확인하지 않았다. 기능 브랜치에서 결과를 준비했으며 최종 승인과 dev 통합 선택은 별도다. 아래 날짜의 이전 제품·실패·성공 기록은 해당 소스의 이력이다.
## 이전 승인 모델 적용의 최종 실행 (2026-10-09 KST)
제품 소스는 `3346eb559bdfba24332feb4d9be4b7104520233e`다. 네 단계 실제 종료 0을 확인했다. 최종 제품 전체의 새 사용자 승인은 별도이며 2026-10-08 KST의 승인은 모델 다섯 묶음·원본 2개·FBX 23개의 정확한 바이트에만 적용한다.
+13 -1
View File
@@ -1,6 +1,18 @@
# MagnetismHeroes 개발 인수인계
## 승인 모델 적용 인수인계 (2026-10-09 KST)
## 지면·풍경·끌기 개선의 현재 상태 (2026-10-11 KST)
지면·큰 소품·놀이터 경계에서 묶음 전체가 마지막 안전 위치에 멈추고 작은 식생은 통과한다. 소품을 실제 지표면에 붙이고 다섯 번호마다 꽃 초원·나무 쉼터·꽃 언덕·양치식물 숲·바위 정원·돌 아치 계곡과 고정 변형을 연결했다. 끌기 중 가까운 상대와 깊이를 보여 주고 놓기·취소하면 이전 수동 시점으로 돌아온다. 자동 시점은 저장하지 않는다.
이어하기는 묶음 모양·ID·기록을 보존한 안전 위치 보정을 먼저 적용한다. 유효 배치가 없을 때만 해당 이어하기를 원래 번호의 초기 배치로 되돌리며 완료·해금·시범·다른 슬롯과 자유 놀이 모드를 보존한다. 검사 오류·한도 소진·쓰기 실패로 초기화하지 않는다. 저장버전1·원래173개 구·30개 비시각 정의·승인 자산455개를 유지했다.
검사 소스 `b438ee266bdda86ec40833792a004413d1182a39`에서 Final EditMode177/177·PlayMode112/112·AndroidBuild가 실제 종료0이었다. APK SHA-256은 `172A20915A9E82C06E557AFC6113189EDE659CA75CAA4A8A2FFF910E7C74CA49`다. 사용자 지시로 AndroidSmoke·기기 설치·정상30개 Android 진행·FPS 검증은 생략했다. 명령·UTC·로그·검사 수·소스·APK는 `artifacts/verification/PlaygroundInteraction/completion.json`에 연결한다. 문서 전용 후속 변경은 제품 파일 동일성으로 검사 소스에 연결한다.
현재 Editor 화면50개와 실제173개 구 입력을 확인했다. `EditorObservation/editor-visual-observer.json`과 `index.html`은 Editor 모의 가로 viewport이며 Android 화면이 아니다. 반복 식생을 줄이고 기존 자갈을 활용해 여섯 대표 풍경의 환경 FBX 삼각형 합계를 이전 개선 배치 대비22~47% 줄였다. 여섯 Editor Camera.Render CPU 중앙값 비교 중 하나는 상승했고 측정 날짜·호스트 부하도 다르므로 전체 성능 향상·GPU 비용·기기 FPS를 주장하지 않는다. 원문은 ResourceSceneryFix/editor-resource-observations.json에 있다. 일부 아치 뒤 가림·낮은 숫자 대비·수동 회전 확대의 안내 겹침, 복원 첫 진입 비용과 실기기·아동 사용성은 남은 확인 범위다.
기존 Main을 열어 체험한다. 초기 builder·일괄 시각 채택·승인 모델·음성 재생성을 실행 준비로 호출하지 않는다. 승인 메시의 읽기 전용 파생 복원 형상은 런타임 판정 자산으로 유지한다. 최종 승인·dev 통합 선택은 별도이며 아래 이전 기록은 현재 소스의 검사 결과가 아니다.
## 이전 승인 모델 적용 인수인계 (2026-10-09 KST)
제품 소스 `3346eb559bdfba24332feb4d9be4b7104520233e`는 기존 규칙·저장·배치를 보존하고 승인한 구 몸체·묶음당 기사 장비·30개 자연 테마를 연결했다. 모델 승인일은 2026-10-08 KST이며 제품 전체의 새 사용자 최종 승인은 별도다. 기존 13 소품과 출처 기록, 후보 원본 기록을 덮어쓰지 않고 `SourceAssets/Models/{Heroes,Meadow}/active-adoption.json`에 정확한 원본·FBX·도구·Unity 재질·프리팹·GUID·검수·APK 해시를 연결한다.
+10
View File
@@ -65,3 +65,13 @@ conda run --no-capture-output -n qwen3-tts python tools/audio/generate_voice.py
후보를 들을 때는 지정한 `--target`의 실제 WAV를 연다. selection의 `runtimeFile`은 게임에 채택할 예정 경로이며 별도 target의 출력 위치를 뜻하지 않는다. 채택 확인은 active-adoption과 정확한 승인 SHA로 수행한다.
얼굴 후보는 투명 PNG와 프롬프트·채택 해시를 남기고 숫자·한국어는 TMP로 유지한다. 실제 Unity 구 표면과 Android 화면에서 가장자리·표정·계수 표시를 확인한다. 모델·얼굴·음성·글꼴 교체 때는 해당 파일의 출처·조건·필요 고지가 APK에 유지되는지도 확인한다.
## 지면·여섯 풍경의 대상 한정 제작
이미 연결된 Main을 그대로 실행한다. 풍경을 제작할 때만 `PlaygroundSceneryAssets.Apply`로 자연 프리팹의 역할별 MeshCollider, 30개 시각 배치·접지와 GameApp의 바닥 연결을 갱신한다. 현재 플레이 경계는 중심 (0, 3.025, 0), 크기 (17, 6.95, 13)이며 구 반지름 여유는 이동 판정에서 적용한다. 기존 초기 구·목표·GUID와 승인 모델·재질을 보존하고 생성 diff를 확인한다. 이전 일괄 채택 API나 초기 builder를 정상 실행 준비로 호출하지 않는다.
`PlaygroundRestoreGeometryAssets.CreateCache`는 승인된 충돌 메시의 읽기 전용 정점·삼각형과 원본·meta 해시를 저장한다. 기존 캐시가 있으면 덮어쓰지 않고 거부한다. 필요한 제작 변경의 검수 후 `BindGameApp`으로 기존 프리팹 참조만 연결한다. FBX의 Read/Write나 import root를 바꾸는 대신 이 런타임 판정 자산을 사용한다.
Final 검사에서는 `MAGNETISM_VISUAL_EVIDENCE`, `MAGNETISM_DRAG_CAMERA_EVIDENCE`, `MAGNETISM_BENCHMARK_EVIDENCE`로 각각 Editor 표현·끌기·자원 자료의 별도 폴더를 지정할 수 있다. `MAGNETISM_NATIVE_FIXTURES`는 실제 Main에서 내보낸 초기 보드·충돌·시점·복원 경계 자료의 폴더다. 과거 자료를 새 검사의 출력으로 혼용하지 않는다. Editor의 모든 초기 173개 구 입력 검사와 Android 대표 입력·30개 정상 풀이를 구분한다.
Android 전체 검사는 primary와 backup을 각각 먼저 pull하여 원래 유무·SHA를 기록한다. 각 파일을 독립적으로 보존하고 finally에서 해당 원래 파일을 복원·pull·대조한다. 원래 없던 파일은 새 주입 상태로 남기지 않는다. 앱 PID와 실제 금색 버튼 화면이 준비됐는지 확인한 뒤 입력한다. `wm size` 전환 직후에는 실제 해상도가 안정됐는지 확인하고, ADB·Editor·녹음 소유자를 하나로 유지한다. 토큰은 기록하지 않는다.
+2
View File
@@ -16,3 +16,5 @@
제작용 모델 다운로드와 QA 도구 다운로드는 개발 PC의 동작이다. 모델 가중치·conda 환경·API 키·캐시·녹음 서버를 APK에 넣지 않는다. 로컬 에뮬레이터 입력 연결의 토큰은 메모리에서만 사용하고 로그·소스·공유 산출물에 기록하지 않는다. 토큰이 노출되면 해당 개발 연결을 종료하고 새 연결로 교체한다. 앱에는 사용자 인증 토큰의 발급·갱신·폐기 절차가 없다.
Numberblocks는 표현 참고다. 해당 작품의 캐릭터·음원·이미지를 제품 파일로 가져오지 않는다. 자체 모델, 생성 얼굴, 음성, 글꼴은 채택 파일과 출처·조건·고지를 연결한다. 이미지 생성과 모델 라이선스를 결과물의 독점권 보장으로 해석하지 않으며, 도구가 제공하지 않은 모델 이름을 추측해 기록하지 않는다.
새 지형에서 유효 배치가 없을 때의 초기화 권한은 문제된 이어하기 하나에만 적용한다. 완료·해금·시범·다른 퍼즐과 관계없는 자유 놀이는 보호하며 저장 전체를 삭제하지 않는다. 자동 위치 보정과 이 한정 초기화 모두 전체 후보 검증과 저장 성공 뒤 확정한다. 검사 도구는 데이터 초기화 전에 시험 앱의 primary와 backup을 각각 보존하고, 정리 후 각각 원래 바이트로 복원했는지 확인한다.
+2
View File
@@ -29,3 +29,5 @@ Unity 버전과 패키지는 프로젝트 설정·manifest·lock 파일에 고
Unity가 자동 변경한 설정을 정리할 때는 Git blob 일치 또는 확인된 생성 변환의 정확한 일치가 증명된 파일만 복원한다. 임의의 설정 차이를 일괄 되돌려 소스 상태 검사를 통과시키지 않는다. 검사 후 제품 코드나 자산이 바뀌면 영향을 받은 검사와 최종 빌드를 갱신한다. 문서만 바뀐 경우 제품 파일 동일성을 확인하고 문서 검토를 수행한다.
AVD·화면 시뮬레이터 결과를 실제 스마트폰·태블릿의 손가락 조작, 성능·발열·배터리, 학습 효과 검증으로 확대하지 않는다. 실제 기기와 아이 대상 검증의 합격 기준은 그 환경에서 측정·관찰할 수 있는 사례로 별도 정한다.
사용자가 기기 검증을 명시적으로 생략한 경우 실행한 검사와 생략한 검사를 따로 기록한다. 2026-10-11 지면·풍경·끌기 개선은 전체 EditMode·PlayMode와 AndroidBuild로 검증했으며 AndroidSmoke·기기 설치·정상30개 Android 진행은 생략했다. 이 예외를 APK 실행 검증 통과나 이후 작업의 상시 면제로 확대하지 않는다.
@@ -15,3 +15,5 @@ ScriptableObject를 Inspector에서 제작하고 시작할 때 순수 C# 정의
## 결과
Unity 자산 GUID·Inspector 참조와 정의 변환 검사를 함께 유지한다. 실행 중 원본 자산을 저장 공간으로 사용할 수 없다. 데이터가 유효해도 실제 발견·조작 가능성은 에디터와 APK에서 따로 확인해야 한다.
2026-10-10의 여섯 풍경도 번호별 고정 StageAsset 배치로 연결한다. 다섯 번호마다 주 소품·실루엣·밀도를 달리하고 같은 묶음 안에도 고정 변형을 둔다. 런타임 무작위 배치는 재입장·자유 놀이에서 장소가 달라질 수 있어 사용하지 않는다. 기존 세 내부 테마와 stage/source 번호를 유지하므로 저장 테마 필드를 추가하지 않으며 초기 구·목표를 미술 배치에 맞춰 옮기지 않는다.
@@ -15,3 +15,5 @@ JSON 버전 1에서 번호별 미완료 상태, 감소하지 않는 완료 기
## 결과
완료 번호의 재플레이 미완료 상태와 완료 기록이 동시에 존재할 수 있다. 자유 놀이 새 진입은 이전 하나를 교체한다. 기기 손실·앱 데이터 삭제 후 원격 복구는 불가능하다. 스키마 변경에는 기존 유효 저장의 처리 결정을 먼저 해야 하며 unsupported 버전을 최신 형식으로 조용히 읽을 수 없다.
2026-10-10의 새 지형 진입에서는 모양을 유지한 가장 가까운 안전 위치 보정을 먼저 선택한다. 전체 저장 삭제는 완료·다른 이어하기를 잃고, 묶음 축소·변형은 아이의 배열을 바꾸므로 사용하지 않는다. 유효한 배치가 없는 경우에만 문제된 이어하기 하나를 해당 번호의 처음 배치로 되돌리는 사용자 선택 예외를 적용한다. 자유 놀이는 자유 놀이로 남고 완료·해금·시범·다른 슬롯은 보존한다. 검사 오류나 검색 한도 도달은 불가능성의 증거가 아니므로 초기화하지 않으며 전체 후보의 단일 저장 성공 뒤에만 진입을 확정한다.
@@ -2,7 +2,7 @@
## 배경
친구는 아이가 만든 구 배열을 유지하면서 표정·마스크·연결 빛·망토로 변신해야 한다. 배경은 세 테마로 구별되며 숫자는 실제 수량과 대응해야 한다. 사용자는 Unity+Blender와 실제 2D 자산의 AI 활용을 선택했다.
친구는 아이가 만든 구 배열을 유지하면서 표정·마스크·연결 빛·망토로 변신해야 한다. 처음 배경은 세 테마로 구별됐으며 숫자는 실제 수량과 대응해야 한다. 사용자는 Unity+Blender와 실제 2D 자산의 AI 활용을 선택했다.
## 결정
@@ -16,6 +16,8 @@ Unity 기본 도형만 사용하면 제작 부담은 줄지만 배경 소품 표
FBX 방향·피벗·콜라이더와 PNG alpha·구 위의 표정 위치를 각각 검수해야 한다. 생성 이미지에 독점권을 주장하거나 도구가 공개하지 않은 모델 ID를 추측할 수 없다. 얼굴 장식은 별도 머리나 구가 아니며 숫자를 그림에 굳히지 않는다. 테마 소품·배치의 다양성은 학습 정답 조건을 늘리는 근거가 아니다.
2026-10-09 KST 적용은 `SourceAssets/Models/{Heroes,Meadow}/active-adoption.json`과 `artifacts/verification/VisualUpgrade/ModelReview/user-approval.json`의 정확한 원본·FBX·Unity 참조 해시를 따른다. 초기 Unity 기본 구와 13개 Blender 소품은 제작 이력으로 보존한다. 현재 세 테마는 맑은 초원·꽃 언덕·바위 언덕이며 Garden/Cloud/Workshop 식별자를 바꾸지 않는다. import root 회전과 sRGB 재질 변환을 실제 Unity 결과로 검수한다. yaw 210도·pitch −45도·거리 15의 지면 아래 시점에서는 넓어진 지면 뒷면이 보드를 더 많이 가리며 실제 대조는 `artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/belowground-raycast-comparison.txt`에 있다. 카메라 제한이나 앞쪽 Collider 무시를 이번 미술 채택에 섞지 않고 후속 카메라 UX 결정으로 남겼다.
2026-10-09 KST 적용은 `SourceAssets/Models/{Heroes,Meadow}/active-adoption.json`과 `artifacts/verification/VisualUpgrade/ModelReview/user-approval.json`의 정확한 원본·FBX·Unity 참조 해시를 따른다. 초기 Unity 기본 구와 13개 Blender 소품은 제작 이력으로 보존한다. 당시 세 테마는 맑은 초원·꽃 언덕·바위 언덕이며 Garden/Cloud/Workshop 식별자를 바꾸지 않는다. import root 회전과 sRGB 재질 변환을 실제 Unity 결과로 검수한다. yaw 210도·pitch −45도·거리 15의 지면 아래 시점에서는 넓어진 지면 뒷면이 보드를 더 많이 가리며 실제 대조는 `artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/belowground-raycast-comparison.txt`에 있다. 카메라 제한이나 앞쪽 Collider 무시를 이번 미술 채택에 섞지 않고 후속 카메라 UX 결정으로 남겼다.
원경 하단 틈은 승인 메시·31개 재질을 다시 제작하는 대신 기존 FarHorizon이 지면과 겹치도록 배치해 보정했다. 사용자 승인 형태와 기존 카메라·Collider 경계를 보존하기 위해 전체 builder 재실행이나 새 카메라 동작을 추가하지 않았다.
2026-10-10에는 이미 승인한 자연 모델을 재조합해 여섯 장소를 만들고 실제 메시 접지·역할별 충돌을 연결했다. 새 모델 제작은 별도 원본·외형 승인과 파일 교체를 늘리므로 기존 모델의 주 소품·밀도·지형 조합 차이로 요청한 다양성을 확보했다. 작은 식생은 통과하고 큰 자연물은 단단한 장애물이며 아치 구멍은 열린 메시로 유지한다. 무제한 지하 시점은 더 큰 지면에서 탐색을 가리므로 수동 시점 안전 제한과 끌기 보조·복귀를 적용한다. 이 변경은 수학 목표·초기 구·저장 테마를 바꾸는 근거가 아니다.
+10 -2
View File
@@ -1,8 +1,16 @@
# 미해결 문제
## 현재 확인한 제한 (2026-10-11 KST)
지면 아래 시점은 안전 범위 제한으로 수정했고 원래173개 구를 지면 위 지원 시점에서 실제 선택·끌기·취소했다. 기본 시점의 stage16/17에서는 아치 뒤 기사 몸체 일부가 가려지며 회전하면 드러난다. stage26 회전 시 숫자7은 바위 배경에서 대비가 낮고 stage27 수동 회전 확대에서는 하단 안내가 앞기사 얼굴 일부와 겹친다. 숫자·안내는 판독 가능하나 모든 수동 시점의 무가림이나 아동 가독성을 보장하지 않는다. 초기 배치와 기존 UI 표현을 유지한 현재 범위의 제한이며 아동 관찰에 따른 표지·안내 여백 조정은 별도 평가가 필요하다. 원문과 처리는 `artifacts/verification/PlaygroundInteraction/EditorObservation/`에 있다.
복원 보정의 첫 진입 비용과 Android 프레임 측정 변동의 원인은 확정하지 않았다. 사용자가 Android 기기 검증을 생략했으므로 추가 기기 재현은 수행하지 않는다. 반복 식생의 메시 비용은 줄였지만 실기기 성능 회복이나 FPS 합격으로 기록하지 않는다.
이전 Android 전체 실패는 `FullFailedbb32fda-Merge16/`, `FullFailedd4128d7-Startup/`, `FullFailedd4128d7-PixelGrab/`의 원문과 SHA 목록으로 보존했다. d587424의 부분 관찰·중단된 자원 재확인은 `NativeObservation/R08Sourced587424/archive.json`에 있다. 기기 연결이 사라진 마지막 측정과 당시 복원 실패는 실패 그대로 남겼고 별도 복구에서 primary·backup 각각 원래 바이트 복원을 확인했다. 이 부분 결과를 현재 전체 Android 통과로 재분류하지 않는다.
2026-10-07 통합본의 당시 규칙·저장·AVD 진행 검증에서는 재현되는 미해결 결함이 없었다. 아래는 2026-10-09 KST 승인 모델 적용에서 확인한 제한이며 과거 결과를 모든 시점의 무결함 보장으로 확대하지 않는다.
## 지면 아래 카메라에서 넓어진 지면이 보드를 가림
## 해결한 이전 문제: 지면 아래 카메라 가림
재현: 실제 Main의 Stage21 초기 6구를 유지한 상태에서 기존 카메라를 yaw 210도·pitch −45도·거리 15로 이동한다. 기존 무제한 회전은 카메라가 지면 아래로 갈 수 있으며 새 넓은 초원 지면의 뒷면이 원래 작은 Island보다 보드를 더 넓게 가린다. 실제 원본 렌더러/새 지면의 같은 보드·카메라 A/B는 `artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/belowground-original-island.png`, `belowground-approved-clearing.png`에 있다.
@@ -10,6 +18,6 @@
물리 대조: `belowground-raycast-comparison.txt`의 s21-b01..06 여섯 실제 Raycast는 양쪽 모두 보존된 PlaygroundIsland를 먼저 맞았다. 바닥 hit 거리는 12.24272~13.68166, 구 hit 거리는 13.46607~15.75898이었다. 원래 바닥 Collider를 새 지면 크기로 확대하지 않았고 앞쪽 hit를 우회하지 않는다. 기존 엄격한 55구 탐색·Collider pick·drag 검사는 통과했지만 일부 기록은 음의 pitch이며 모든 사례가 지면 위 시점이라는 뜻은 아니다.
현재 미수정 이유: 이번 적용은 기존 카메라·pick·초기 배치 보존을 우선했으며 pitch 제한·입력 hit 우회·초기 구 이동을 추가하지 않았다. 카메라 회전 범위와 복귀 동작의 변경 여부는 별도 UX 결정으로 남겼다. 후속 결정 뒤 원본/새 지면·모든 구 탐색·직접 조작·저장 복원을 함께 검증한다.
2026-10-09 당시 미수정 이유: 이번 적용은 기존 카메라·pick·초기 배치 보존을 우선했으며 pitch 제한·입력 hit 우회·초기 구 이동을 추가하지 않았다. 카메라 회전 범위와 복귀 동작의 변경 여부는 별도 UX 결정으로 남겼다. 후속 결정 뒤 원본/새 지면·모든 구 탐색·직접 조작·저장 복원을 함께 검증한다.
실제 스마트폰·태블릿의 손가락 조작·가독성·성능·발열·배터리, 5~7세 사용 관찰·학습 효과, iOS·스토어 게시의 미검증은 후속 범위이며 재현된 결함으로 계산하지 않는다.
+14
View File
@@ -1,5 +1,19 @@
# 현재 구현과 검증 범위
## 지면·풍경·끌기 개선의 현재 상태 (2026-10-11 KST)
지면·큰 소품·놀이터 경계에서 묶음 전체가 마지막 안전 위치에 멈추고 작은 식생은 통과한다. 소품을 실제 지표면에 붙이고 다섯 번호마다 꽃 초원·나무 쉼터·꽃 언덕·양치식물 숲·바위 정원·돌 아치 계곡과 고정 변형을 연결했다. 끌기 중 가까운 상대와 깊이를 보여 주고 놓기·취소하면 이전 수동 시점으로 돌아온다. 자동 시점은 저장하지 않는다.
이어하기는 묶음 모양·ID·기록을 보존한 안전 위치 보정을 먼저 적용한다. 유효 배치가 없을 때만 해당 이어하기를 원래 번호의 초기 배치로 되돌리며 완료·해금·시범·다른 슬롯과 자유 놀이 모드를 보존한다. 검사 오류·한도 소진·쓰기 실패로 초기화하지 않는다. 저장버전1·원래173개 구·30개 비시각 정의·승인 자산455개를 유지했다.
검사 소스 `b438ee266bdda86ec40833792a004413d1182a39`에서 Final EditMode177/177·PlayMode112/112·AndroidBuild가 실제 종료0이었다. APK SHA-256은 `172A20915A9E82C06E557AFC6113189EDE659CA75CAA4A8A2FFF910E7C74CA49`다. 사용자 지시로 AndroidSmoke·기기 설치·정상30개 Android 진행·FPS 검증은 생략했다. 명령·UTC·로그·검사 수·소스·APK는 `artifacts/verification/PlaygroundInteraction/completion.json`에 연결한다. 문서 전용 후속 변경은 제품 파일 동일성으로 검사 소스에 연결한다.
현재 Editor 화면50개와 실제173개 구 입력을 확인했다. `EditorObservation/editor-visual-observer.json`과 `index.html`은 Editor 모의 가로 viewport이며 Android 화면이 아니다. 반복 식생을 줄이고 기존 자갈을 활용해 여섯 대표 풍경의 환경 FBX 삼각형 합계를 이전 개선 배치 대비22~47% 줄였다. 여섯 Editor Camera.Render CPU 중앙값 비교 중 하나는 상승했고 측정 날짜·호스트 부하도 다르므로 전체 성능 향상·GPU 비용·기기 FPS를 주장하지 않는다. 원문은 ResourceSceneryFix/editor-resource-observations.json에 있다. 일부 아치 뒤 가림·낮은 숫자 대비·수동 회전 확대의 안내 겹침, 복원 첫 진입 비용과 실기기·아동 사용성은 남은 확인 범위다.
기존 Main을 열어 체험한다. 초기 builder·일괄 시각 채택·승인 모델·음성 재생성을 실행 준비로 호출하지 않는다. 승인 메시의 읽기 전용 파생 복원 형상은 런타임 판정 자산으로 유지한다. 최종 승인·dev 통합 선택은 별도이며 아래 이전 기록은 현재 소스의 검사 결과가 아니다.
## 이전 승인 모델 제품 (2026-10-09 KST)
2026-10-09 KST. 한국어·Android·가로 화면·오프라인 체험판의 기존 30개 스테이지와 성공 후 자유 놀이를 유지하며 승인 모델을 적용했다. 아래 2026-10-07 제품 승인·검사 결과는 이전 외형의 이력이며 새 제품 전체의 사용자 승인으로 확대하지 않는다.
청록색 구 몸체와 대표 친구의 투구·무딘 검·둥근 방패 한 벌, 정원 1..10의 맑은 초원·구름 11..20의 꽃 언덕·별 작업실 21..30의 바위 언덕을 연결했다. 원본 2개·새 FBX 23개와 Unity 재질 31개는 `SourceAssets/Models/{Heroes,Meadow}/active-adoption.json`에 해시로 연결한다. 기존 13 FBX·원본·후보 provenance는 보존한다. 기존 Garden/Cloud/Workshop 식별자, 30개 비시각 정의·구 ID/초기 위치/총량·GUID·44개 승인 음성·6표정·UI·폰트·Mixer·Core·저장은 유지한다.