diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 5195bc45..5aa75a2c 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -36,7 +36,8 @@ "Bash(/bin/rm:*)", "WebFetch(domain:docs.unity3d.com)", "Bash(ls:*)", - "WebFetch(domain:discussions.unity.com)" + "WebFetch(domain:discussions.unity.com)", + "mcp__ai-game-developer__screenshot-game-view" ], "deny": [], "ask": [] diff --git a/.mcp.json b/.mcp.json index 4b68a134..1d44ea42 100644 --- a/.mcp.json +++ b/.mcp.json @@ -1,8 +1,8 @@ { "mcpServers": { - "UnityMCP": { + "ai-game-developer": { "type": "http", - "url": "http://localhost:8080/mcp" + "url": "http://localhost:55726" } } } \ No newline at end of file diff --git a/Assets/Resources/AI-Game-Developer-Config.json b/Assets/Resources/AI-Game-Developer-Config.json new file mode 100644 index 00000000..2b3cf054 --- /dev/null +++ b/Assets/Resources/AI-Game-Developer-Config.json @@ -0,0 +1,423 @@ +{ + "logLevel": 3, + "keepServerRunning": true, + "transportMethod": 2, + "tools": [ + { + "name": "assets-copy", + "enabled": true + }, + { + "name": "assets-create-folder", + "enabled": true + }, + { + "name": "assets-delete", + "enabled": true + }, + { + "name": "assets-find", + "enabled": true + }, + { + "name": "assets-find-built-in", + "enabled": true + }, + { + "name": "assets-get-data", + "enabled": true + }, + { + "name": "assets-material-create", + "enabled": true + }, + { + "name": "assets-modify", + "enabled": true + }, + { + "name": "assets-move", + "enabled": true + }, + { + "name": "assets-refresh", + "enabled": true + }, + { + "name": "assets-prefab-close", + "enabled": true + }, + { + "name": "assets-prefab-create", + "enabled": true + }, + { + "name": "assets-prefab-instantiate", + "enabled": true + }, + { + "name": "assets-prefab-open", + "enabled": true + }, + { + "name": "assets-prefab-save", + "enabled": true + }, + { + "name": "assets-shader-list-all", + "enabled": true + }, + { + "name": "console-get-logs", + "enabled": true + }, + { + "name": "editor-application-get-state", + "enabled": true + }, + { + "name": "editor-application-set-state", + "enabled": true + }, + { + "name": "editor-selection-get", + "enabled": true + }, + { + "name": "editor-selection-set", + "enabled": true + }, + { + "name": "gameobject-component-add", + "enabled": true + }, + { + "name": "gameobject-component-destroy", + "enabled": true + }, + { + "name": "gameobject-component-get", + "enabled": true + }, + { + "name": "gameobject-component-list-all", + "enabled": true + }, + { + "name": "gameobject-component-modify", + "enabled": true + }, + { + "name": "gameobject-create", + "enabled": true + }, + { + "name": "gameobject-destroy", + "enabled": true + }, + { + "name": "gameobject-duplicate", + "enabled": true + }, + { + "name": "gameobject-find", + "enabled": true + }, + { + "name": "gameobject-modify", + "enabled": true + }, + { + "name": "gameobject-set-parent", + "enabled": true + }, + { + "name": "object-get-data", + "enabled": true + }, + { + "name": "object-modify", + "enabled": true + }, + { + "name": "package-add", + "enabled": true + }, + { + "name": "package-list", + "enabled": true + }, + { + "name": "package-remove", + "enabled": true + }, + { + "name": "package-search", + "enabled": true + }, + { + "name": "reflection-method-call", + "enabled": true + }, + { + "name": "reflection-method-find", + "enabled": true + }, + { + "name": "scene-create", + "enabled": true + }, + { + "name": "scene-get-data", + "enabled": true + }, + { + "name": "scene-list-opened", + "enabled": true + }, + { + "name": "scene-open", + "enabled": true + }, + { + "name": "scene-save", + "enabled": true + }, + { + "name": "scene-set-active", + "enabled": true + }, + { + "name": "scene-unload", + "enabled": true + }, + { + "name": "screenshot-camera", + "enabled": true + }, + { + "name": "screenshot-game-view", + "enabled": true + }, + { + "name": "screenshot-scene-view", + "enabled": true + }, + { + "name": "script-delete", + "enabled": true + }, + { + "name": "script-execute", + "enabled": true + }, + { + "name": "script-read", + "enabled": true + }, + { + "name": "script-update-or-create", + "enabled": true + }, + { + "name": "tests-run", + "enabled": true + } + ], + "prompts": [ + { + "name": "setup-animator-controller", + "enabled": true + }, + { + "name": "create-simple-tweening", + "enabled": true + }, + { + "name": "setup-timeline-sequence", + "enabled": true + }, + { + "name": "add-animation-events", + "enabled": true + }, + { + "name": "create-procedural-animation", + "enabled": true + }, + { + "name": "setup-sprite-animation", + "enabled": true + }, + { + "name": "add-ik-system", + "enabled": true + }, + { + "name": "create-animation-blending", + "enabled": true + }, + { + "name": "organize-project-structure", + "enabled": true + }, + { + "name": "import-setup-sprites", + "enabled": true + }, + { + "name": "setup-audio-manager", + "enabled": true + }, + { + "name": "configure-build-settings", + "enabled": true + }, + { + "name": "create-material-library", + "enabled": true + }, + { + "name": "setup-asset-bundles", + "enabled": true + }, + { + "name": "optimize-texture-settings", + "enabled": true + }, + { + "name": "setup-addressables", + "enabled": true + }, + { + "name": "add-debug-visualization", + "enabled": true + }, + { + "name": "setup-performance-profiling", + "enabled": true + }, + { + "name": "create-test-scene", + "enabled": true + }, + { + "name": "add-logging-system", + "enabled": true + }, + { + "name": "create-unit-tests", + "enabled": true + }, + { + "name": "setup-debug-ui", + "enabled": true + }, + { + "name": "add-assertion-checks", + "enabled": true + }, + { + "name": "create-automated-tests", + "enabled": true + }, + { + "name": "add-standard-components", + "enabled": true + }, + { + "name": "setup-player-controller", + "enabled": true + }, + { + "name": "create-ui-canvas", + "enabled": true + }, + { + "name": "add-physics-interactions", + "enabled": true + }, + { + "name": "create-interactive-object", + "enabled": true + }, + { + "name": "setup-audio-source", + "enabled": true + }, + { + "name": "create-particle-effects", + "enabled": true + }, + { + "name": "setup-animator-component", + "enabled": true + }, + { + "name": "setup-basic-scene", + "enabled": true + }, + { + "name": "organize-scene-hierarchy", + "enabled": true + }, + { + "name": "add-lighting-setup", + "enabled": true + }, + { + "name": "create-prefab-from-selection", + "enabled": true + }, + { + "name": "setup-scene-camera", + "enabled": true + }, + { + "name": "create-environment-template", + "enabled": true + }, + { + "name": "generate-monobehaviour-template", + "enabled": true + }, + { + "name": "add-event-system", + "enabled": true + }, + { + "name": "create-singleton-manager", + "enabled": true + }, + { + "name": "setup-coroutine-framework", + "enabled": true + }, + { + "name": "create-scriptableobject-data", + "enabled": true + }, + { + "name": "implement-object-pooling", + "enabled": true + }, + { + "name": "add-state-machine", + "enabled": true + }, + { + "name": "setup-dependency-injection", + "enabled": true + } + ], + "resources": [ + { + "name": "GameObject from Current Scene by Path", + "enabled": true + } + ], + "host": "http://localhost:55726", + "timeoutMs": 10000, + "keepConnected": true, + "token": null +} \ No newline at end of file diff --git a/Assets/Resources/AI-Game-Developer-Config.json.meta b/Assets/Resources/AI-Game-Developer-Config.json.meta new file mode 100644 index 00000000..ad966754 --- /dev/null +++ b/Assets/Resources/AI-Game-Developer-Config.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5ecf6949f73508f49ba3a0633329a219 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Factory/Prefabs/Tab/TabContentComponentList.prefab b/Assets/Resources/Factory/Prefabs/Tab/TabContentComponentList.prefab index d39d7b5c..e411e08a 100644 --- a/Assets/Resources/Factory/Prefabs/Tab/TabContentComponentList.prefab +++ b/Assets/Resources/Factory/Prefabs/Tab/TabContentComponentList.prefab @@ -139,7 +139,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -12, y: -1} + m_AnchoredPosition: {x: -20, y: -1} m_SizeDelta: {x: 22, y: 22} m_Pivot: {x: 1, y: 1} --- !u!222 &5485997075992529675 @@ -246,7 +246,7 @@ PrefabInstance: m_Modifications: - target: {fileID: 1375483911066562825, guid: 963f47de712c3844183989c7fc7fbd8a, type: 3} propertyPath: m_SizeDelta.x - value: 238 + value: -65 objectReference: {fileID: 0} - target: {fileID: 5097404189591199700, guid: 963f47de712c3844183989c7fc7fbd8a, type: 3} propertyPath: m_AnchorMax.x diff --git a/Assets/Resources/UIToolkit/Modal/Setting.meta b/Assets/Resources/Factory/UIToolkit.meta similarity index 77% rename from Assets/Resources/UIToolkit/Modal/Setting.meta rename to Assets/Resources/Factory/UIToolkit.meta index 113b6910..dd3dc108 100644 --- a/Assets/Resources/UIToolkit/Modal/Setting.meta +++ b/Assets/Resources/Factory/UIToolkit.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 62b1c6b38fe308748b808fb2b576e6e2 +guid: 35623d99e7e18de4c9218b9878efaac6 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Scripts/UVC/UIToolkit/Modal/Setting.meta b/Assets/Resources/Factory/UIToolkit/Modal.meta similarity index 77% rename from Assets/Scripts/UVC/UIToolkit/Modal/Setting.meta rename to Assets/Resources/Factory/UIToolkit/Modal.meta index e000bedb..634e2b5a 100644 --- a/Assets/Scripts/UVC/UIToolkit/Modal/Setting.meta +++ b/Assets/Resources/Factory/UIToolkit/Modal.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9210d67d228d2814eb32cc841227db5b +guid: 9ffd6459fed612148ac685b6329657a1 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentAlarmUXML.uxml b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentAlarmUXML.uxml new file mode 100644 index 00000000..b4408e3d --- /dev/null +++ b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentAlarmUXML.uxml @@ -0,0 +1,5 @@ + + + + + diff --git a/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentAlarmUXML.uxml.meta b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentAlarmUXML.uxml.meta new file mode 100644 index 00000000..5cffaf0d --- /dev/null +++ b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentAlarmUXML.uxml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 92f820b7de9d43c428503b7c574c9e69 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentDisplayUXML.uxml b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentDisplayUXML.uxml new file mode 100644 index 00000000..aae0b7b8 --- /dev/null +++ b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentDisplayUXML.uxml @@ -0,0 +1,5 @@ + + + + + diff --git a/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentDisplayUXML.uxml.meta b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentDisplayUXML.uxml.meta new file mode 100644 index 00000000..da394c8a --- /dev/null +++ b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentDisplayUXML.uxml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: db6157353e844a84fabf731aed504f56 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentGeneralUXML.uxml b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentGeneralUXML.uxml new file mode 100644 index 00000000..64bd8d64 --- /dev/null +++ b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentGeneralUXML.uxml @@ -0,0 +1,5 @@ + + + + + diff --git a/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentGeneralUXML.uxml.meta b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentGeneralUXML.uxml.meta new file mode 100644 index 00000000..037ca074 --- /dev/null +++ b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentGeneralUXML.uxml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7b805d40178aceb48b21275834afbb24 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentInputUXML.uxml b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentInputUXML.uxml new file mode 100644 index 00000000..075dbfb3 --- /dev/null +++ b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentInputUXML.uxml @@ -0,0 +1,5 @@ + + + + + diff --git a/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentInputUXML.uxml.meta b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentInputUXML.uxml.meta new file mode 100644 index 00000000..f4f82a65 --- /dev/null +++ b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentInputUXML.uxml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5224fd32ba226a340aaac4e6dc070861 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Assets/Resources/UIToolkit/List/UTKReordableTabListUss.uss b/Assets/Resources/UIToolkit/List/UTKReordableTabListUss.uss new file mode 100644 index 00000000..ca3e5ce9 --- /dev/null +++ b/Assets/Resources/UIToolkit/List/UTKReordableTabListUss.uss @@ -0,0 +1,68 @@ +/* + * =================================== + * UTKReordableTabListUss.uss + * 탭 기반 재정렬 가능 리스트 스타일 + * =================================== + */ + +/* =================================== + Base Container + =================================== */ + +.reordable-tab-list { + flex-grow: 1; + padding: 8px; + background-color: var(--color-bg-secondary); + border-radius: var(--radius-s); + border-width: var(--border-width); + border-color: var(--color-border); +} + +/* =================================== + TabView 내부 스타일 오버라이드 + 외부 utk-tabview--align-left 등 align 클래스가 + descendant selector로 내부 TabView에 영향을 주지 않도록 리셋 + =================================== */ + +.reordable-tab-list > .utk-tabview { + flex-grow: 1; + flex-direction: column; +} + +.reordable-tab-list > .utk-tabview > .unity-tab-view__header-container { + flex-direction: row; + border-right-width: 0; + border-top-width: 0; + border-left-width: 0; + border-bottom-width: var(--border-width); + border-bottom-color: var(--color-border); +} + +.reordable-tab-list > .utk-tabview > .unity-tab-view__content-container { + padding: 0; +} + +.reordable-tab-list > .utk-tabview .unity-tab__header { + margin-right: var(--space-s); + margin-bottom: 0; + position: relative; +} + +.reordable-tab-list > .utk-tabview .unity-tab__header-underline { + left: 0; + right: 0; + bottom: 0; + top: auto; + width: auto; + height: 2px; +} + +/* =================================== + 탭 콘텐츠 내부 ReordableList 스타일 오버라이드 + =================================== */ + +.reordable-tab-list .reordable-list { + border-width: 0; + border-radius: 0; + background-color: transparent; +} diff --git a/Assets/Resources/UIToolkit/Modal/Setting/UTKSettingDisplayInfoTabViewUss.uss.meta b/Assets/Resources/UIToolkit/List/UTKReordableTabListUss.uss.meta similarity index 87% rename from Assets/Resources/UIToolkit/Modal/Setting/UTKSettingDisplayInfoTabViewUss.uss.meta rename to Assets/Resources/UIToolkit/List/UTKReordableTabListUss.uss.meta index 6173d6c3..d67ec83b 100644 --- a/Assets/Resources/UIToolkit/Modal/Setting/UTKSettingDisplayInfoTabViewUss.uss.meta +++ b/Assets/Resources/UIToolkit/List/UTKReordableTabListUss.uss.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 360ccda715f15bc479dec409d0ed87cf +guid: 5e72692fcb817e14e8fbcaaf9b4f6b17 ScriptedImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/Assets/Resources/UIToolkit/Modal/Setting/UTKSettingDisplayInfoTabViewUss.uss b/Assets/Resources/UIToolkit/Modal/Setting/UTKSettingDisplayInfoTabViewUss.uss deleted file mode 100644 index 02a100cb..00000000 --- a/Assets/Resources/UIToolkit/Modal/Setting/UTKSettingDisplayInfoTabViewUss.uss +++ /dev/null @@ -1,47 +0,0 @@ -/* - * =================================== - * UTKSettingDisplayInfoTabViewUss.uss - * 설정 표시 정보 탭 뷰 컨테이너 스타일 - * =================================== - */ - -/* =================================== - Base Container - =================================== */ - -.setting-display-tab-view { - flex-grow: 1; - background-color: var(--color-bg-secondary); - border-radius: var(--radius-s); - border-width: var(--border-width); - border-color: var(--color-border); -} - -/* =================================== - ListView 내부 여백 조정 - =================================== */ - -.setting-display-tab-view .utk-listview { - flex-grow: 1; - border-width: 0; - border-radius: 0; - background-color: transparent; -} - -/* =================================== - 드래그 중 아이템 스타일 (Unity 내장 클래스) - =================================== */ - -.setting-display-tab-view .unity-list-view__reorderable-item__container { - flex-direction: row; - align-items: center; -} - -/* =================================== - 드래그 핸들 바 (Unity 내장 reorder handle) - 커스텀 드래그 핸들 사용하므로 기본 숨김 - =================================== */ - -.setting-display-tab-view .unity-list-view__reorderable-handle-bar { - display: none; -} diff --git a/Assets/Resources/UIToolkit/Modal/UTKLoadingUss.uss b/Assets/Resources/UIToolkit/Modal/UTKLoadingUss.uss new file mode 100644 index 00000000..925f6b9c --- /dev/null +++ b/Assets/Resources/UIToolkit/Modal/UTKLoadingUss.uss @@ -0,0 +1,16 @@ +/* + * =================================== + * UTKLoadingUss.uss + * 회전 로딩 스피너 스타일 + * =================================== + * + * 색상은 C#에서 CustomStyleResolvedEvent로 --color-primary 값을 읽어 처리합니다. + * 두께/크기는 C# 속성(Thickness, Size) 또는 UXML 태그(thickness, size)로 설정하세요. + */ + +.utk-loading { + align-items: center; + justify-content: center; + flex-shrink: 0; + overflow: hidden; +} diff --git a/Assets/Resources/UIToolkit/Modal/UTKLoadingUss.uss.meta b/Assets/Resources/UIToolkit/Modal/UTKLoadingUss.uss.meta new file mode 100644 index 00000000..774739d3 --- /dev/null +++ b/Assets/Resources/UIToolkit/Modal/UTKLoadingUss.uss.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 21b7e91639030834c94d38263ad773ae +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} + disableValidation: 0 diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKReordableListSample.uxml b/Assets/Resources/UIToolkit/Sample/List/UTKReordableListSample.uxml new file mode 100644 index 00000000..3523d296 --- /dev/null +++ b/Assets/Resources/UIToolkit/Sample/List/UTKReordableListSample.uxml @@ -0,0 +1,20 @@ + + +