一键导入
scene-ui-visibility
씬별/모드별 UI 가시성 제어 — scene, panel visibility, overlap, mode isolation, 배타 그룹
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
씬별/모드별 UI 가시성 제어 — scene, panel visibility, overlap, mode isolation, 배타 그룹
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Unity Play 시작 씬, scene-authored UI source-of-truth, authored-first binder, RobotControl/Onboarding 라우팅 착시를 함께 디버깅하는 운영 스킬
Use when adding, extending, or debugging Waypoint Teaching & Playback: saving robot poses as waypoints, sequencing them, playing/looping sequences, exporting/importing JSON, coroutine-based runner engine, or teaching UI integration.
MonoBehaviour에서 UI 생성 코드를 ViewBuilder 정적 클래스 + Refs struct로 분리
Robot Library / Sandbox robot showroom 디버깅과 튜닝 — showroomoutput, comparestrip, preview pod, Game view vs Scene view 스케일 차이, hero/page selection, runtime root 중복
Use when working on FAIRINO FR5 6-axis robot integration in this repo: collecting official FR5 docs, mapping Unity UI inputs to the FAIRINO C# SDK, planning real-robot control and safety, documenting FR5 hardware/DH/protocol details, or building adapters around MoveJ/MoveL/ServoJ/ServoCart and status feedback.
Main 탭형 학습 쉘의 로봇별 JSON 콘텐츠를 추가/수정/검증하는 스킬. `Assets/Runtime/Resources/LearningTabs/*.json` 문안 업데이트, 새 로봇용 탭 문서 추가, MainLearningTabsLoader fallback 조정, Main 탭 콘텐츠 schema 변경, JSON 파싱/폴백/Unity MCP 검증이 필요할 때 사용한다.
基于 SOC 职业分类
| name | scene-ui-visibility |
| description | 씬별/모드별 UI 가시성 제어 — scene, panel visibility, overlap, mode isolation, 배타 그룹 |
씬에 UI 패널을 추가하거나, 패널 겹침 문제가 발생하거나, 새 씬/모드를 만들 때.
키워드: panel visibility, UI 겹침, 씬 UI, SetVisible, 패널 초기 상태, ExecuteAlways, mode isolation
Assets/Scripts/App/SceneCatalog.cs — 씬 목록 (Boot, Onboarding, Home, Main, RobotLibrary, Sandbox)Assets/Scripts/App/AppController.cs — HideAllContentPanels() + 모드별 메서드Assets/Scripts/App/AppUiBinder.cs — UI 자동 바인딩 패턴Assets/Scripts/App/SandboxSceneCoordinator.cs — Sandbox 전용 가시성Assets/Scripts/UI/CLAUDE.md — UI 폴더 규칙docs/ref/WIREFRAME.md — 화면별 패널 배치AppController.ApplyFeatureState()가 적용하는 가시성 규칙입니다.
패턴: HideAllContentPanels() → 모드별 Apply___Visibility() → config flag 적용
| 패널 | MathReadiness | Beginner | Core | Sandbox |
|---|---|---|---|---|
| MathReadinessPanel | ✅ | ❌ | ❌ | ❌ |
| BeginnerLeftPanel | ❌ | ✅ (config) | ❌ | ❌ |
| DHTableEditor | ❌ | config | config | ❌ |
| StepTutorPanel | ❌ | ✅ | ✅ | ❌ |
| MatrixDisplay | ❌ | config | config | ❌ |
| WhyItMovedPanel | config | config | config | ❌ |
| TargetFeedbackPanel | ❌ | config | ❌ | ❌ |
| TemplateSelector | ❌ | ✅ | ✅ | ❌ |
| SandboxActionPanel | ❌ | ❌ | ❌ | ✅ |
| SnapshotLitePanel | ❌ | ❌ | ❌ | ✅ |
| JointInputRail | config | config | config | ✅ |
| StepNavigator | ✅ | ✅ | ✅ | ❌ |
| SceneNavigationBar | ✅ | ✅ | ✅ | ✅ |
✅ = 항상 보임❌ = 항상 숨김config = TutorStepConfig 플래그에 따라 결정| 패널 | 상태 |
|---|---|
| HomeContinueHubController | Active |
| SceneNavigationBar | Active |
| (나머지 모든 학습 패널) | 없음 (씬에 존재하지 않음) |
| 패널 | 상태 |
|---|---|
| OnboardingManager | Active |
| SceneNavigationBar | Active |
| (나머지 모든 학습 패널) | 없음 |
| 패널 | 상태 |
|---|---|
| RobotLibraryManager | Active |
| RobotDetailDrawer | Inactive (이벤트 구동) |
| SceneNavigationBar | Active |
같은 영역에서 배타 그룹으로 묶인 패널은 동시에 Active일 수 없습니다.
left-exclusive: DHTableEditor | BeginnerLeftPanel | MathReadinessPanel
right-exclusive: StepTutorPanel+MatrixDisplay | WhyItMovedPanel | TargetFeedbackPanel | CompareModePanelHelper
topbar-controls: TemplateSelector (드롭다운+Sandbox+Glossary 버튼)
sandbox-only: SandboxActionPanel | SnapshotLitePanel
전환 트리거: AppController.ApplyFeatureState() → HideAllContentPanels() → Apply{Mode}Visibility()
모드 전환 시 개별 SetVisible(false) 호출을 나열하지 말고, HideAllContentPanels()로 전부 끈 뒤 해당 모드 메서드에서 필요한 것만 켜야 합니다:
// AppController.cs 패턴
private void ApplyFeatureState(TutorStepConfig config)
{
HideAllContentPanels(); // Step 1: 전부 끄기
ApplyCommonVisualization(config); // Step 2: 공통 시각화
Apply{Mode}Visibility(config); // Step 3: 모드 전용 켜기
}
새 콘텐츠 패널을 추가하면 반드시:
HideAllContentPanels()에 newPanel?.SetVisible(false) 추가SetVisible(true) 추가모든 패널 MonoBehaviour에 SetVisible(bool) 퍼블릭 메서드를 구현합니다:
public void SetVisible(bool visible)
{
if (panelRoot != null)
{
panelRoot.gameObject.SetActive(visible);
}
}
EnsureLayout() / EnsurePresentation() 메서드는 UI 계층 구조만 생성합니다.
가시성 제어는 반드시 SetVisible() 또는 외부 오케스트레이터가 담당합니다.
[ExecuteAlways]가 필요한 경우, 에디터에서 불필요한 활성 상태 변경을 하지 않도록 가드합니다.
[ExecuteAlways] 필요 여부 판단 기준:
DHTableEditor, MatrixDisplay)ToastNotificationController, SpotlightOverlay)[ExecuteAlways]는 제거합니다.HideAllContentPanels()가 자동으로 배타 그룹을 처리하므로, 개별 모드 메서드에서는 켜기만 하면 됩니다.
AppController에 Apply{NewMode}Visibility(TutorStepConfig) 메서드 추가ApplyFeatureState의 분기에 조건 추가SceneNavigator.Load()가 LoadSceneMode.Single을 사용하므로, 씬 전환 시 이전 씬의 모든 오브젝트가 자동 파괴됩니다. DontDestroyOnLoad는 사용하지 않습니다.
DontDestroyOnLoad 사용 금지 — 씬 전환 시 UI 잔류 원인EnsureLayout() 안에서 SetActive(true/false) 호출 금지 — 구조와 가시성 분리SetVisible(false) 호출 금지 — HideAllContentPanels()가 이미 처리함[ExecuteAlways] 불필요한 컴포넌트에 남겨두기 금지HideAllContentPanels()를 건너뛰고 모드별 메서드만 호출 금지HideAllContentPanels() — 11개 패널 일괄 숨김ApplyMathReadinessVisibility() — MathReadinessPanel만 표시ApplyBeginnerVisibility() — StepTutor + Template + DH + Matrix + BeginnerLeft + TargetFeedbackApplyCoreVisibility() — StepTutor + Template + DH + MatrixSandboxSceneCoordinator.ApplySandboxPresentation() — SandboxAction + SnapshotLite모든 콘텐츠 패널에 SetVisible(bool) 구현 완료:
DHTableEditor, BeginnerLeftPanel, MathReadinessPanelStepTutorPanel, MatrixDisplay (신규), WhyItMovedPanel, TargetFeedbackPanel, CompareModePanelHelperTemplateSelector (신규 — 드롭다운+Sandbox+Glossary 버튼)SandboxActionPanel, SnapshotLitePanel배타 그룹 패널에서 Awake()의 EnsureLayout() 제거, OnEnable()에 SetVisible(false) 추가:
BeginnerLeftPanel, MathReadinessPanel, TargetFeedbackPanel, WhyItMovedPanel런타임 전용 컴포넌트에서 제거:
ToastNotificationController, SpotlightOverlay, HomeContinueHubController, SandboxActionPanel, SnapshotLitePanelSetVisible(bool) 퍼블릭 메서드 존재HideAllContentPanels()에 모든 콘텐츠 패널 포함[ExecuteAlways] 에디터 프리뷰가 필요 없는 컴포넌트에서 제거됨EnsureLayout()에 SetActive 호출 없음[scene-ui-visibility 적용]
- 모드: {MathReadiness / Beginner / Core / Sandbox}
- 추가/수정 패널: {패널 이름} ({영역})
- HideAllContentPanels 업데이트: {Y/N}
- Apply{Mode}Visibility 업데이트: {Y/N}
- 매트릭스 업데이트: {Y/N}
- Unity 컴파일: 에러 0