diff --git a/.cursorrules b/.cursorrules deleted file mode 100644 index f794c55ad..000000000 --- a/.cursorrules +++ /dev/null @@ -1,81 +0,0 @@ -@@ -0,0 +1,80 @@ -# Unity 6000.1.0f1 + URP 프로젝트 규칙 - -## 기술 스택 -- Unity 버전: 6000.1.0f1 -- 렌더링 파이프라인: Universal Render Pipeline (URP) - -## 코딩 원칙 -### 1. 아키텍처 설계 -- 모듈화된 컴포넌트 기반 아키텍처 적용 -- MVVM 패턴 적극 활용 -- GameState, GameEvent, GameFlow, GameFramework 구조 활용 -- Restaurant 관련 시스템 모듈화 (RestaurantState, RestaurantEvent, RestaurantCharacter 등) -- 레이어 간 의존성 최소화 - -### 2. 종속성 관리 -- 인터페이스 기반 설계 우선 -- 구체 클래스보다 추상화 선호 -- Dependency Injection 패턴 활용 -- 강한 결합도 지양, 느슨한 결합도 지향 - -### 3. 유지보수성 -- SOLID 원칙 준수 -- 단일 책임 원칙 (SRP) 엄격 적용 -- 개방-폐쇄 원칙 (OCP) 준수 -- 코드 재사용성 극대화 - -### 4. 확장성 -- 플러그인 아키텍처 패턴 적용 -- 이벤트 기반 시스템 활용 -- 모듈화된 컴포넌트 설계 -- 새로운 기능 추가 시 기존 코드 수정 최소화 - -### 5. 명명 규칙 (Naming Conventions) -- **변수명**: 의미있는 단어 사용, 줄임말 지양 - - ❌ `btn`, `txt`, `obj`, `go`, `ui`, `mg`, `ctrl`, 'kvp' (kvp같은 경우 key 또는 value가 무엇인지 알 수 있는 변수명 사용) - - ✅ `button`, `text`, `object`, `gameObject`, `userInterface`, `manager`, `controller` - - ✅ `keyValuePair`, `tabValueButton`, `enumValueTabButton` (구체적인 의미 표현) -- **함수명**: 동사로 시작하는 명확한 의미 표현 - - ❌ `Init()`, `Setup()`, `Get()`, `Set()` - - ✅ `Initialize()`, `SetupComponents()`, `GetPlayerData()`, `SetPlayerHealth()` - -### 6. 코드 스타일 -- **논리 연산자**: `!` 키워드 대신 `== false` 사용 - - ❌ `if (!isActive)`, `if (!hasComponent)` - - ✅ `if (isActive == false)`, `if (hasComponent == false)` -- **문자열**: 리터럴보다 상수 사용 권장 -- **컬렉션 타입**: 성능상 우월한 경우가 아닌 이상 `List<>` 사용 권장 - - ❌ `int[]`, `string[]`, `GameObject[]` (일반적인 경우) - - ✅ `List`, `List`, `List` (일반적인 경우) - - ⚠️ `int[]` (고정 크기, 성능이 중요한 경우만) - -## Unity 특화 규칙 -### URP 최적화 -- URP 렌더링 파이프라인 최적화 우선 -- Shader Graph 활용 권장 -- Volume 시스템 적극 활용 -- 렌더링 성능 모니터링 - -### 성능 고려사항 -- Object Pooling 패턴 적용 -- 메모리 할당 최소화 -- 적절한 Update/LateUpdate 사용 -- Addressables 시스템 활용 - -## 프로젝트 구조 -- Assets/_DDD: 프로젝트 핵심 시스템 (프로젝트명) -- Assets/_ScriptAssets: 스크립트 에셋 및 ScriptableObject -- Assets/_Scripts: 모듈화된 스크립트 시스템들 - - GameFramework: 게임 프레임워크 핵심 - - GameState: 게임 상태 관리 - - GameEvent: 게임 이벤트 시스템 - - GameFlow: 게임 플로우 제어 - - Restaurant*: 레스토랑 시뮬레이션 관련 시스템 - - InputSystem: 입력 시스템 - - Audio: 오디오 시스템 -- 각 폴더별 명확한 책임 분리 - -## 프레임워크 활용 -- 기존 프레임워크와의 통합 방법 -- 커스텀 프레임워크 확장 방법 diff --git a/.gitignore b/.gitignore index 09557b96f..d4ed32b8a 100644 --- a/.gitignore +++ b/.gitignore @@ -98,11 +98,7 @@ Packages/com.distantlands.cozy.core/Samples~/Legacy Integrations/*.unitypackage. Assets/_DDD/_Addressables/Sprites/* .autosave/ -*/Assets/AddressableAssetsData/AssetGroups/*.asset -*/Assets/AddressableAssetsData/Android* -*/Assets/AddressableAssetsData/iOS* -*/Assets/AddressableAssetsData/Windows* -*/Assets/AddressableAssetsData/*/*.bin* +*/Assets/AddressableAssetsData/* ProjectSettings/Packages/com.unity.probuilder/Settings.json *.DotSettings diff --git a/Assets/External/HighlightPlus/Runtime/Resources/HighlightPlus/HighlightClearStencil.shader b/Assets/External/HighlightPlus/Runtime/Resources/HighlightPlus/HighlightClearStencil.shader old mode 100755 new mode 100644 diff --git a/Assets/External/HighlightPlus/Runtime/Resources/HighlightPlus/blueNoiseVL.png b/Assets/External/HighlightPlus/Runtime/Resources/HighlightPlus/blueNoiseVL.png old mode 100755 new mode 100644 diff --git a/Assets/_DDD/Editor/ProjectSetupMenu.cs b/Assets/_DDD/Editor/ProjectSetupMenu.cs index 5e4ab12bd..0eb35a5ce 100644 --- a/Assets/_DDD/Editor/ProjectSetupMenu.cs +++ b/Assets/_DDD/Editor/ProjectSetupMenu.cs @@ -6,9 +6,7 @@ namespace DDD { public static class ProjectSetupMenu { - private const string MenuPath = "Tools/Project Setup"; - - [MenuItem(MenuPath)] + [MenuItem("ProjectDDD/Project Setup", priority = 0)] public static void OpenSetupByType() { var guids = AssetDatabase.FindAssets("t:" + nameof(ProjectDDD_Setup)); diff --git a/Assets/_DDD/_ScriptAssets/Localization/Global_Message/Global_Message Shared Data.asset b/Assets/_DDD/_ScriptAssets/Localization/Global_Message/Global_Message Shared Data.asset index f72ccaea1..8848c4ed4 100644 --- a/Assets/_DDD/_ScriptAssets/Localization/Global_Message/Global_Message Shared Data.asset +++ b/Assets/_DDD/_ScriptAssets/Localization/Global_Message/Global_Message Shared Data.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd5656b17d06c87cced68dd83f7c6a58b0553c3d22fb1d9195f4c83077794c5b -size 1843 +oid sha256:0c2c5ce8eb1cd28baae61c49d9fc5d2e9aa85366ad84b80c70badec2055bc6a6 +size 1937 diff --git a/Assets/_DDD/_ScriptAssets/Localization/Global_Message/Global_Message_en.asset b/Assets/_DDD/_ScriptAssets/Localization/Global_Message/Global_Message_en.asset index 618e9e48b..45208b09e 100644 --- a/Assets/_DDD/_ScriptAssets/Localization/Global_Message/Global_Message_en.asset +++ b/Assets/_DDD/_ScriptAssets/Localization/Global_Message/Global_Message_en.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae79c300a2d4ebbfb0fcab6b08dc87bed28d3e990f0d12e1ec27e07c00e15aae -size 2149 +oid sha256:cf994ec42335af2b466cf4baeb551825db41d72bbec51fbd675832f3fbecf295 +size 2504 diff --git a/Assets/_DDD/_ScriptAssets/Localization/Global_Message/Global_Message_ja.asset b/Assets/_DDD/_ScriptAssets/Localization/Global_Message/Global_Message_ja.asset index 7f32fccf8..385f020c9 100644 --- a/Assets/_DDD/_ScriptAssets/Localization/Global_Message/Global_Message_ja.asset +++ b/Assets/_DDD/_ScriptAssets/Localization/Global_Message/Global_Message_ja.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:309d58c509f19a6793c7d0f6bf0f48449c85876296e0088612020f2ad395c6da -size 2092 +oid sha256:1b832ff55683ef5aaf516e2d49aeb9971d579aa05e4a09c9733ccdc439f5b6e9 +size 2447 diff --git a/Assets/_DDD/_ScriptAssets/Localization/Global_Message/Global_Message_ko.asset b/Assets/_DDD/_ScriptAssets/Localization/Global_Message/Global_Message_ko.asset index 04ccfb94e..6a7219f4b 100644 --- a/Assets/_DDD/_ScriptAssets/Localization/Global_Message/Global_Message_ko.asset +++ b/Assets/_DDD/_ScriptAssets/Localization/Global_Message/Global_Message_ko.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e3bbade411875459bc539828e1dd95ffadcdfd1f5367b0916a7a20e137ad99e -size 3011 +oid sha256:413be82468f4caf104578487bc88f66e0bcf581a3239e1eff712644f90bfcf7d +size 3688 diff --git a/Assets/_DDD/_ScriptAssets/Localization/Item_Description/Item_Description Shared Data.asset b/Assets/_DDD/_ScriptAssets/Localization/Item_Description/Item_Description Shared Data.asset index 023c659e5..611ef2d5b 100644 --- a/Assets/_DDD/_ScriptAssets/Localization/Item_Description/Item_Description Shared Data.asset +++ b/Assets/_DDD/_ScriptAssets/Localization/Item_Description/Item_Description Shared Data.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49c22b27dac2ada105b9bef031fc6b6b79e2900f50fef951d6d4a34837085a10 +oid sha256:b3c099dbdc467ad972aa56e1feb4577a1ed0d726d22f0407d24ef7cc103bf023 size 5985 diff --git a/Assets/_DDD/_ScriptAssets/Localization/Item_Description/Item_Description_en.asset b/Assets/_DDD/_ScriptAssets/Localization/Item_Description/Item_Description_en.asset index 6c88d8ac7..1c5d7b315 100644 --- a/Assets/_DDD/_ScriptAssets/Localization/Item_Description/Item_Description_en.asset +++ b/Assets/_DDD/_ScriptAssets/Localization/Item_Description/Item_Description_en.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ab3992de9014e875028a2e7a808fe461ba9e384467f2c29b9b94f7d57b1b64d7 +oid sha256:4c0abae5999c2023cbf828638fa80b6691959429da1c38fecb7b43a351f3a0f0 size 4610 diff --git a/Assets/_DDD/_ScriptAssets/Localization/Item_Description/Item_Description_ja.asset b/Assets/_DDD/_ScriptAssets/Localization/Item_Description/Item_Description_ja.asset index 9b782352a..3fcb53c3d 100644 --- a/Assets/_DDD/_ScriptAssets/Localization/Item_Description/Item_Description_ja.asset +++ b/Assets/_DDD/_ScriptAssets/Localization/Item_Description/Item_Description_ja.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e2d78933d83d32aa1a9b6f859b3fc97dd6d28f10f6096eb89983f1197373bdd5 +oid sha256:4c8eb49aa11cbac5849fe7daecfcca2f8d9571940d36faa3a67aa806079f6c1a size 4610 diff --git a/Assets/_DDD/_ScriptAssets/Localization/Item_Description/Item_Description_ko.asset b/Assets/_DDD/_ScriptAssets/Localization/Item_Description/Item_Description_ko.asset index b8fc449e9..32abda009 100644 --- a/Assets/_DDD/_ScriptAssets/Localization/Item_Description/Item_Description_ko.asset +++ b/Assets/_DDD/_ScriptAssets/Localization/Item_Description/Item_Description_ko.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:14c9053be6c55239da3976d5789af3798197573b48807fd66284920ad6790b85 +oid sha256:4e665f359689cc383316138abf404c95c2869224cf63014d4da8c09942f7b9c2 size 13002 diff --git a/Assets/_DDD/_ScriptAssets/Localization/Item_Name/Item_Name Shared Data.asset b/Assets/_DDD/_ScriptAssets/Localization/Item_Name/Item_Name Shared Data.asset index 814a717d0..441e06fa4 100644 --- a/Assets/_DDD/_ScriptAssets/Localization/Item_Name/Item_Name Shared Data.asset +++ b/Assets/_DDD/_ScriptAssets/Localization/Item_Name/Item_Name Shared Data.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b2d991be9555059bf7a14d73dcdf507606b20eb01d36b525407412720f4b6573 +oid sha256:c80bda799915c85651eb65d5b076b9bf8998e477673aedc295c69f5999581f48 size 5571 diff --git a/Assets/_DDD/_ScriptAssets/Localization/Item_Name/Item_Name_en.asset b/Assets/_DDD/_ScriptAssets/Localization/Item_Name/Item_Name_en.asset index c9ffcafb6..d1d795ee8 100644 --- a/Assets/_DDD/_ScriptAssets/Localization/Item_Name/Item_Name_en.asset +++ b/Assets/_DDD/_ScriptAssets/Localization/Item_Name/Item_Name_en.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:345f7add01e47e5a6f3b04b9ee9e4428b595742c4050a2c14016e6901a36d6c6 +oid sha256:de0e1bba7cfe170fb966ea389fadda35a7eeff6cb88bbcc2fdd194a578fa77df size 5165 diff --git a/Assets/_DDD/_ScriptAssets/Localization/Item_Name/Item_Name_ja.asset b/Assets/_DDD/_ScriptAssets/Localization/Item_Name/Item_Name_ja.asset index 3d34c8238..e33405d31 100644 --- a/Assets/_DDD/_ScriptAssets/Localization/Item_Name/Item_Name_ja.asset +++ b/Assets/_DDD/_ScriptAssets/Localization/Item_Name/Item_Name_ja.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f8133cfb8dc0f96d5c79c499e11ca74fe50887755293001f074bc0b1c1ce78c +oid sha256:d2687aa757b9927b234cf7ce29cf5bb685578749327b7e92d2f87c1a7f190776 size 4553 diff --git a/Assets/_DDD/_ScriptAssets/Localization/Item_Name/Item_Name_ko.asset b/Assets/_DDD/_ScriptAssets/Localization/Item_Name/Item_Name_ko.asset index 8ca98fd7b..50e590491 100644 --- a/Assets/_DDD/_ScriptAssets/Localization/Item_Name/Item_Name_ko.asset +++ b/Assets/_DDD/_ScriptAssets/Localization/Item_Name/Item_Name_ko.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:21c944ceb62a7b06f2181121226a833321f7549ac97195defeefc6bbd2c898af +oid sha256:43f0a9d68fa7591220378417de17e66e964604ef4caf4b98986f1edbe39dcb6f size 5858 diff --git a/Assets/_DDD/_ScriptAssets/Localization/Item_Taste/Item_Taste Shared Data.asset b/Assets/_DDD/_ScriptAssets/Localization/Item_Taste/Item_Taste Shared Data.asset index 2898194bf..e34fdbfd6 100644 --- a/Assets/_DDD/_ScriptAssets/Localization/Item_Taste/Item_Taste Shared Data.asset +++ b/Assets/_DDD/_ScriptAssets/Localization/Item_Taste/Item_Taste Shared Data.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b86175f331968f72462c3f2a9f454184c3528845687031844520746b28e9162a +oid sha256:88c760e228bbf430841ae34c11bf7655bfb4901a2209f3169e0ffed31e374eda size 2361 diff --git a/Assets/_DDD/_ScriptAssets/Localization/Item_Taste/Item_Taste_en.asset b/Assets/_DDD/_ScriptAssets/Localization/Item_Taste/Item_Taste_en.asset index 6891abc58..3bbb95539 100644 --- a/Assets/_DDD/_ScriptAssets/Localization/Item_Taste/Item_Taste_en.asset +++ b/Assets/_DDD/_ScriptAssets/Localization/Item_Taste/Item_Taste_en.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:893968454758bde0c20c974dbd90be7eaccafd1aaa5e299ae27a5df754a4d8d6 +oid sha256:af17b2e8207ecfdb0099b963c573cdc466caf75f6d4843036da9a65e108a2101 size 2150 diff --git a/Assets/_DDD/_ScriptAssets/Localization/Item_Taste/Item_Taste_ja.asset b/Assets/_DDD/_ScriptAssets/Localization/Item_Taste/Item_Taste_ja.asset index b1e5c0375..67b968ac5 100644 --- a/Assets/_DDD/_ScriptAssets/Localization/Item_Taste/Item_Taste_ja.asset +++ b/Assets/_DDD/_ScriptAssets/Localization/Item_Taste/Item_Taste_ja.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7046099d5baab4c043a1bcc2d65a393eea3849f8e1e1efcb05cb4443715e45fb +oid sha256:f0e79869ea8394207c987a5432d933e9ccef96ea30885ab5cfee17a731a7dcc3 size 2026 diff --git a/Assets/_DDD/_ScriptAssets/Localization/Item_Taste/Item_Taste_ko.asset b/Assets/_DDD/_ScriptAssets/Localization/Item_Taste/Item_Taste_ko.asset index 261bb68e5..8163a7bc7 100644 --- a/Assets/_DDD/_ScriptAssets/Localization/Item_Taste/Item_Taste_ko.asset +++ b/Assets/_DDD/_ScriptAssets/Localization/Item_Taste/Item_Taste_ko.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9153c4c378e339d0077cbfa971a4da24fc483eedef93e0dee5ac44d8a7504591 +oid sha256:accad71307afc0c4b553ccf6ccd1f0bbe1e1e0e737edcc983f7069d461ebd6c5 size 2392 diff --git a/Assets/_DDD/_Scripts/GameFramework/Localization/LocalizationImporter.cs b/Assets/_DDD/_Scripts/GameFramework/Localization/LocalizationImporter.cs index 6a92b0568..9ea7bd810 100644 --- a/Assets/_DDD/_Scripts/GameFramework/Localization/LocalizationImporter.cs +++ b/Assets/_DDD/_Scripts/GameFramework/Localization/LocalizationImporter.cs @@ -2,9 +2,11 @@ using UnityEngine; using UnityEditor; using UnityEngine.Localization.Tables; +using UnityEngine.Localization.Metadata; using System.Collections.Generic; using Newtonsoft.Json; using UnityEditor.Localization; +using System.Linq; namespace DDD { @@ -59,7 +61,16 @@ public static async void ImportAllFromSheet(string webAppUrl) continue; } - table.AddEntry(sharedEntry.Id, row[localeCode]); + // Smart String 처리 정책 + // 값에 SmartFormat 구문(중괄호)이 포함되어 있는 경우에만 Smart로 간주 + string value = row[localeCode]; + bool containsSmartSyntax = ContainsSmartFormatSyntax(value); + + var entry = table.AddEntry(sharedEntry.Id, value); + if (entry != null) + { + entry.IsSmart = containsSmartSyntax; + } EditorUtility.SetDirty(table); } } @@ -69,6 +80,19 @@ public static async void ImportAllFromSheet(string webAppUrl) Debug.Log("[Localization Import] 완료: Google Sheet → Unity"); } + + /// + /// SmartFormat 사용 여부를 간단히 추정합니다. + /// 대부분의 SmartFormat 구문은 중괄호를 포함하므로 값에 '{'와 '}'가 모두 존재하는 경우 Smart로 판단합니다. + /// + private static bool ContainsSmartFormatSyntax(string value) + { + if (string.IsNullOrEmpty(value)) return false; + int openIdx = value.IndexOf('{'); + if (openIdx < 0) return false; + int closeIdx = value.IndexOf('}', openIdx + 1); + return closeIdx >= 0; + } } } #endif \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/GameFramework/Localization/LocalizationSyncTool.cs b/Assets/_DDD/_Scripts/GameFramework/Localization/LocalizationSyncTool.cs index 392f81970..c69d3304e 100644 --- a/Assets/_DDD/_Scripts/GameFramework/Localization/LocalizationSyncTool.cs +++ b/Assets/_DDD/_Scripts/GameFramework/Localization/LocalizationSyncTool.cs @@ -7,13 +7,13 @@ public static class LocalizationSyncTool { public static readonly string WebAppUrl = "https://script.google.com/macros/s/AKfycbwVQ7_x0Didf_13h3qPB9lSMobBR9xr6nLffj_n8znNvfs-pdNylNA7nWzd2R-_IHGf/exec"; - [MenuItem("Tools/Localization/Google Sheet → Unity")] + [MenuItem("ProjectDDD/Localization/Google Sheet → Unity")] public static void ImportAll() { LocalizationImporter.ImportAllFromSheet(WebAppUrl); } - [MenuItem("Tools/Localization/Unity → Google Sheet")] + [MenuItem("ProjectDDD/Localization/Unity → Google Sheet")] public static void ExportAll() { LocalizationExporter.ExportAllToSheet(WebAppUrl);