From d21161bae5e05e5f3ae32f727f2abc6675634b0e Mon Sep 17 00:00:00 2001 From: swrring Date: Tue, 10 Nov 2026 08:57:35 +0900 Subject: [PATCH] =?UTF-8?q?UI=20=EA=B5=AC=EC=A1=B0=20=EC=A0=88=20=3D=20?= =?UTF-8?q?=EC=A1=B0=EC=A7=81=20=EA=B7=9C=EC=B9=99=20P41=20=EC=9D=98=20?= =?UTF-8?q?=EC=9D=B4=20=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20SOT=20=EB=AA=85=EC=8B=9C(#1109=20=C2=B7=20PD=202026?= =?UTF-8?q?-11-10=20=EB=AA=85=EB=AC=B8=ED=99=94)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- CLAUDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index 5c4eb991..ec17c8e3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -61,7 +61,7 @@ Unity.exe -projectPath -executeMethod TKS.EditorTools.ProjectSetup.AutoPl ## UI 캔버스·아틀라스 구조 (PD 2026-11-10 「리소스·정보가 얼마나 자주 바뀌는지에 따라 캔버스를 나누어 최적화 · 드로우콜 최소화 구조 필수」) -UI 를 새로 만들거나 고칠 때 **반드시** 이 구조를 따른다(어기면 `Tests/PlayMode/UILayerTests` 가 실패). +UI 를 새로 만들거나 고칠 때 **반드시** 이 구조를 따른다(어기면 `Tests/PlayMode/UILayerTests` 가 실패). 조직 전체 표준 = 조직 레포 프로젝트 규칙 **P41**(`.claude/skills/너드나비스-코어룰/rules/P41.md` · 2026-11-10) — 이 절은 그 표준의 이 프로젝트 구현 SOT 이자 다른 프로젝트의 참조 구현이다. - **갱신 등급 3단**(`Runtime/UI/UiLayer.cs` `UiRate`): **Static** = 화면을 열 때만(바탕 · 틀 · 고정 글자) · **Event** = 조작·게임 사건 때(값 · 선택 · 턴 · 팝업) · **Frame** = 매 프레임(호흡 · 튀김 · 스크롤 내용 · 끌기 · 미니맵 · 커서). 등급이 다른 것은 같은 캔버스에 두지 않는다 — 캔버스는 자식 하나만 바뀌어도 그 캔버스 전체를 다시 묶는다. - **만드는 법**: 루트 = `UiLayer.Root(go, cam, order, plane, reference, rate)` · 기존 오브젝트를 층으로 = `UiLayer.Nest(go, rate, raycast)` · 빈 층 = `UiLayer.Group(name, parent, rate)` · 매 프레임 요소 = `UiLayer.Isolate(go)`(`UiPulse`·`UiPop` 은 스스로 호출 · 바로 위 부모가 Frame 층이면 그 층에 합침). 중첩 캔버스는 **overrideSorting 끔**(그리는 순서 · `RectMask2D`/`Mask` 자르기 유지) · **누르는 그래픽이 있는 층에만 GraphicRaycaster**(중첩 캔버스의 그래픽은 부모 캔버스 레이캐스터가 못 봄 → 누름 층은 `raycast: true`).