검색창 개발-디자인 수정 필요, 언어변환 버튼 개발

This commit is contained in:
logonkhi
2025-07-09 19:33:00 +09:00
parent fb41c806f4
commit 64e8517118
35 changed files with 3274 additions and 395 deletions

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5ad60b1404105d44a992ea2ab8e3f35f
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 12db500810bde2f42b6cc1aa17543fb5
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,811 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1928778550412568362
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3549070521602479230}
- component: {fileID: 4287760844710852833}
- component: {fileID: 607742823154810497}
- component: {fileID: 1278875195337434962}
- component: {fileID: 4095973766915737330}
m_Layer: 5
m_Name: UISearchInput
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3549070521602479230
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1928778550412568362}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4502938537745225681}
- {fileID: 1890860600301155531}
- {fileID: 5272697919907718161}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0.5}
m_AnchorMax: {x: 1, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 160, y: 36}
m_Pivot: {x: 0, y: 0.5}
--- !u!222 &4287760844710852833
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1928778550412568362}
m_CullTransparentMesh: 1
--- !u!114 &607742823154810497
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1928778550412568362}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 836d6527858b7494297e122eb69601fd, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &1278875195337434962
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1928778550412568362}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 694507160, guid: fe40b90c67f2f75419562a6fe1003d5b, type: 3}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &4095973766915737330
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1928778550412568362}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 1278875195337434962}
m_TextViewport: {fileID: 1890860600301155531}
m_TextComponent: {fileID: 7695301836477375805}
m_Placeholder: {fileID: 5154488720832019090}
m_VerticalScrollbar: {fileID: 0}
m_VerticalScrollbarEventHandler: {fileID: 0}
m_LayoutGroup: {fileID: 0}
m_ScrollSensitivity: 1
m_ContentType: 0
m_InputType: 0
m_AsteriskChar: 42
m_KeyboardType: 0
m_LineType: 0
m_HideMobileInput: 0
m_HideSoftKeyboard: 0
m_CharacterValidation: 0
m_RegexValue:
m_GlobalPointSize: 14
m_CharacterLimit: 0
m_OnEndEdit:
m_PersistentCalls:
m_Calls: []
m_OnSubmit:
m_PersistentCalls:
m_Calls: []
m_OnSelect:
m_PersistentCalls:
m_Calls: []
m_OnDeselect:
m_PersistentCalls:
m_Calls: []
m_OnTextSelection:
m_PersistentCalls:
m_Calls: []
m_OnEndTextSelection:
m_PersistentCalls:
m_Calls: []
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
m_OnTouchScreenKeyboardStatusChanged:
m_PersistentCalls:
m_Calls: []
m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_CustomCaretColor: 0
m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412}
m_Text:
m_CaretBlinkRate: 0.85
m_CaretWidth: 1
m_ReadOnly: 0
m_RichText: 1
m_GlobalFontAsset: {fileID: 0}
m_OnFocusSelectAll: 1
m_ResetOnDeActivation: 1
m_KeepTextSelectionVisible: 0
m_RestoreOriginalTextOnEscape: 1
m_isRichTextEditingAllowed: 0
m_LineLimit: 0
isAlert: 0
m_InputValidator: {fileID: 0}
m_ShouldActivateOnSelect: 1
--- !u!1 &3438542737618699616
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7844129296646170794}
- component: {fileID: 936426748953526809}
- component: {fileID: 7695301836477375805}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7844129296646170794
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3438542737618699616}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1890860600301155531}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &936426748953526809
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3438542737618699616}
m_CullTransparentMesh: 1
--- !u!114 &7695301836477375805
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3438542737618699616}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: "\u200B"
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 08cebd004d97ca742ac80400f37f4eed, type: 2}
m_sharedMaterial: {fileID: 4860575619018115804, guid: 08cebd004d97ca742ac80400f37f4eed, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4294967295
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 12
m_fontSizeBase: 12
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 1
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 3
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 1
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &3447948940841377002
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8052970446522842747}
- component: {fileID: 7541747247650234515}
- component: {fileID: 8739521748137565572}
m_Layer: 5
m_Name: Line
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &8052970446522842747
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3447948940841377002}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1890860600301155531}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 10, y: -23}
m_SizeDelta: {x: 40, y: 1}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7541747247650234515
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3447948940841377002}
m_CullTransparentMesh: 1
--- !u!114 &8739521748137565572
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3447948940841377002}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.9622642, g: 0.9622642, b: 0.9622642, a: 1}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &4003586409901263487
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6560483782444665719}
- component: {fileID: 2048538601592092616}
- component: {fileID: 5154488720832019090}
- component: {fileID: 696716118280799389}
m_Layer: 5
m_Name: Placeholder
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6560483782444665719
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4003586409901263487}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1890860600301155531}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2048538601592092616
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4003586409901263487}
m_CullTransparentMesh: 1
--- !u!114 &5154488720832019090
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4003586409901263487}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: "\uC704\uCE58 \uAC80\uC0C9"
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 08cebd004d97ca742ac80400f37f4eed, type: 2}
m_sharedMaterial: {fileID: 4860575619018115804, guid: 08cebd004d97ca742ac80400f37f4eed, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 3741319167
m_fontColor: {r: 1, g: 1, b: 1, a: 0.87058824}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 12
m_fontSizeBase: 12
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 1
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 0
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 1
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!114 &696716118280799389
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4003586409901263487}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreLayout: 1
m_MinWidth: -1
m_MinHeight: -1
m_PreferredWidth: -1
m_PreferredHeight: -1
m_FlexibleWidth: -1
m_FlexibleHeight: -1
m_LayoutPriority: 1
--- !u!1 &6023503677689822770
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5272697919907718161}
- component: {fileID: 8757900534283014278}
- component: {fileID: 3930243373676917347}
- component: {fileID: 3154601933036176681}
m_Layer: 5
m_Name: SearchButton
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &5272697919907718161
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6023503677689822770}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 3549070521602479230}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0.5}
m_AnchorMax: {x: 1, y: 0.5}
m_AnchoredPosition: {x: -6, y: 16}
m_SizeDelta: {x: 28, y: 28}
m_Pivot: {x: 1, y: 1}
--- !u!222 &8757900534283014278
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6023503677689822770}
m_CullTransparentMesh: 1
--- !u!114 &3930243373676917347
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6023503677689822770}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: -120, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: b96446804d2e29645827d31952f863cb, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &3154601933036176681
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6023503677689822770}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 3930243373676917347}
m_OnClick:
m_PersistentCalls:
m_Calls: []
--- !u!1 &6814560974940120229
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1890860600301155531}
- component: {fileID: 513732089905394585}
m_Layer: 5
m_Name: Text Area
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1890860600301155531
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6814560974940120229}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 8052970446522842747}
- {fileID: 6560483782444665719}
- {fileID: 7844129296646170794}
m_Father: {fileID: 3549070521602479230}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 100, y: 22}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &513732089905394585
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6814560974940120229}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding: {x: -8, y: -5, z: -8, w: -5}
m_Softness: {x: 0, y: 0}
--- !u!1 &8350341070115958246
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4502938537745225681}
- component: {fileID: 8272108380190167004}
- component: {fileID: 6620080535182918297}
m_Layer: 5
m_Name: Line
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4502938537745225681
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8350341070115958246}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 3549070521602479230}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 10, y: -26}
m_SizeDelta: {x: -20, y: 1}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8272108380190167004
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8350341070115958246}
m_CullTransparentMesh: 1
--- !u!114 &6620080535182918297
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8350341070115958246}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.9622642, g: 0.9622642, b: 0.9622642, a: 0.46666667}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ed442d88645f41448a9abe8128c26bbb
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8c2607ee6393233469d54afd9b237601
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 B

View File

@@ -0,0 +1,143 @@
fileFormatVersion: 2
guid: 6561c8152d504364f80de9acecbaa2cc
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 64
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: WebGL
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: WindowsStoreApps
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 B

View File

@@ -0,0 +1,143 @@
fileFormatVersion: 2
guid: b96446804d2e29645827d31952f863cb
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 64
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: WebGL
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: WindowsStoreApps
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -224,7 +224,7 @@ MonoBehaviour:
clusterView: {fileID: 6304868380873761510}
expandedView: {fileID: 952545100964675415}
alarmSingleIconManagerPrefab: {fileID: 7314511769243682470, guid: e9acc8c9a93a2b5409fc01661660b217, type: 3}
objectYOffset: 0
objectYOffset: 10
iconSpacing: 20
expandOffsetX: 0
expandOffsetY: 0

View File

@@ -6,7 +6,7 @@
</layout>
</appender>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="C:\Users\uvc\Documents\works\2025\03.Simulator\dev\base\XRBase\Logs\unityLogs\" />
<file value="D:\works\2025\03.Simulator\dev\base\XRBase\Logs\unityLogs\" />
<datepattern value="yyyy\\MM\\yyyy-MM-dd'.log'"/>
<appendToFile value="true" />
<staticLogFileName value="false" />
@@ -15,7 +15,7 @@
</layout>
</appender>
<appender name="FatalRollingFile" type="log4net.Appender.RollingFileAppender">
<file value="C:\Users\uvc\Documents\works\2025\03.Simulator\dev\base\XRBase\Logs\unityLogs\fatal.log" />
<file value="D:\works\2025\03.Simulator\dev\base\XRBase\Logs\unityLogs\fatal.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="500" />

View File

@@ -32,7 +32,7 @@ namespace RTG
}
/// <summary>
/// Places 'rect' below 'other' and sets its center to the same center
/// Places 'size' below 'other' and sets its center to the same center
/// as 'other' horizontally.
/// </summary>
public static Rect PlaceBelowCenterHrz(this Rect rect, Rect other)

View File

@@ -1172,6 +1172,140 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1101428664}
m_CullTransparentMesh: 1
--- !u!1001 &1316465221
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 1561871830}
m_Modifications:
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_Pivot.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_AnchorMax.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_AnchorMin.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_SizeDelta.x
value: 87
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_SizeDelta.y
value: 30
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_AnchoredPosition.x
value: -140
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 703028475656766602, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1041581967906135930, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_Enabled
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1688553935695331173, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_AnchorMax.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1688553935695331173, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4121049089239917032, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_Name
value: UILanguageButton
objectReference: {fileID: 0}
- target: {fileID: 4909717836101914427, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_AnchorMax.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4909717836101914427, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4909717836101914427, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6993504691953077341, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
propertyPath: m_Options.m_Options.Array.size
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
--- !u!224 &1316465222 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 645519807822385127, guid: 12db500810bde2f42b6cc1aa17543fb5, type: 3}
m_PrefabInstance: {fileID: 1316465221}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &1379798062
PrefabInstance:
m_ObjectHideFlags: 0
@@ -1410,6 +1544,8 @@ RectTransform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 7308135740740370488}
- {fileID: 1316465222}
- {fileID: 1101428665}
m_Father: {fileID: 483439351}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -1432,9 +1568,9 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.24528301, g: 0.24528301, b: 0.24528301, a: 1}
m_RaycastTarget: 1
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
@@ -2164,6 +2300,108 @@ PrefabInstance:
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 2266b188915dc8a4b87a3e53e52c5999, type: 3}
--- !u!1001 &7308135740740370487
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 1561871830}
m_Modifications:
- target: {fileID: 1928778550412568362, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_Name
value: UISearchInput
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_Pivot.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_AnchorMax.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_AnchorMax.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_AnchorMin.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_AnchorMin.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_SizeDelta.x
value: 160
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_SizeDelta.y
value: 28
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_AnchoredPosition.x
value: -314
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
--- !u!224 &7308135740740370488 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 3549070521602479230, guid: ed442d88645f41448a9abe8128c26bbb, type: 3}
m_PrefabInstance: {fileID: 7308135740740370487}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &8261569461642068635
PrefabInstance:
m_ObjectHideFlags: 0

View File

@@ -1,9 +1,10 @@
using Cysharp.Threading.Tasks;
using SampleProject.Config;
using System;
using UnityEngine;
using UVC.Core;
using UVC.Data;
using UVC.Tests;
using UVC.Locale;
using UVC.Util;
namespace SampleProject
{
@@ -22,6 +23,7 @@ namespace SampleProject
/// </summary>
protected override void Init()
{
SettupConfig();
SetNetworkInfo();
if (Initialized != null)
{
@@ -34,6 +36,24 @@ namespace SampleProject
//Tester.RunAllTests();
}
private void SettupConfig()
{
if (AppConfig.LoadConfig())
{
//기본 언어 설정
bool success = LocalizationManager.Instance.LoadDefaultLocalizationData(AppConfig.Config.Language);
Debug.Log($"LocalizationManager: LoadDefaultLocalizationData success: {success}");
if (!Application.isEditor && Application.platform == RuntimePlatform.WindowsPlayer)
{
//창 설정
if (AppConfig.Config.Window != null)
{
WindowTools.Instance.Init(AppConfig.Config.Window);
}
}
}
}
private void SetNetworkInfo()
{
URLList.Add("baseinfo", "http://localhost:8888/baseinfo/00:00");

View File

@@ -0,0 +1,52 @@
using Newtonsoft.Json;
using System.IO;
using UnityEngine;
using static UVC.Util.WindowTools;
namespace SampleProject.Config
{
/// <summary>
/// 애플리케이션의 설정을 관리하는 클래스입니다. AppConfig.json 파일에서 설정을 로드합니다.
/// </summary>
public class AppConfig
{
/// <summary>
/// 로드된 애플리케이션 설정을 담고 있는 정적 인스턴스입니다.
/// </summary>
public static AppConfig Config { get; private set; }
/// <summary>
/// Windows 런타임 환경에서 StreamingAssets 폴더의 AppConfig.json 파일로부터 설정을 로드합니다.
/// </summary>
/// <returns>설정 로드 성공 여부를 반환합니다.</returns>
public static bool LoadConfig()
{
string path = Path.Combine(Application.streamingAssetsPath, "AppConfig.json");
if (File.Exists(path))
{
string json = File.ReadAllText(path);
Config = JsonConvert.DeserializeObject<AppConfig>(json);
Debug.Log($"AppConfig loaded from {path}");
return Config != null;
}
else
{
Debug.LogError($"File not found: {path}");
}
return false;
}
/// <summary>
/// 애플리케이션의 언어 설정입니다.
/// </summary>
[JsonProperty("language")]
public string Language { get; set; }
/// <summary>
/// 애플리케이션의 창 관련 설정입니다.
/// </summary>
[JsonProperty("window")]
public WindowInfoData Window { get; set; }
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ac974d1504daf8645be61d0e44b60da8

View File

@@ -73,8 +73,8 @@ namespace SampleProject.UI.Menu
}),
new MenuItemData("language", "menu_language", subMenuItems: new List<MenuItemData>
{
new MenuItemData("lang_ko", "menu_lang_korean", new ChangeLanguageCommand("ko-KR")),
new MenuItemData("lang_en", "menu_lang_english", new ChangeLanguageCommand("en-US")),
new MenuItemData("lang_ko", "menu_lang_korean", new ChangeLanguageCommand("ko")),
new MenuItemData("lang_en", "menu_lang_english", new ChangeLanguageCommand("en")),
// new MenuItemData("lang_jp", "menu_lang_japanese", new ChangeLanguageCommand("ja-JP")) // 예: 일본어 추가
})
}));

View File

@@ -343,7 +343,7 @@ namespace UVC.Extension
/// <param name="parentRectTransform">기준이 될 부모 RectTransform입니다.</param>
/// <remarks>
/// [초보자 설명]
/// 이 메서드는 LayoutGroup 자체의 UI 영역 크기(`sizeDelta`)를 `parentRectTransform`의 실제 렌더링 크기(`rect.width`, `rect.height`)와 동일하게 만듭니다.
/// 이 메서드는 LayoutGroup 자체의 UI 영역 크기(`sizeDelta`)를 `parentRectTransform`의 실제 렌더링 크기(`size.width`, `size.height`)와 동일하게 만듭니다.
/// LayoutGroup의 앵커 설정에 따라 `sizeDelta`의 의미가 달라질 수 있지만, 일반적으로 이 메서드는 LayoutGroup이 부모의 영역을 꽉 채우도록 만듭니다.
/// </remarks>
/// <example>

View File

@@ -51,7 +51,7 @@ namespace UVC.Factory.Alarm
if (rect != null && detailTxt != null)
{
RectTransform textRect = detailTxt.GetComponent<RectTransform>();
// 현재 배경(rect)의 높이와 텍스트(textRect) 영역 높이의 차이를 계산하여 상하 여백(margin)을 구합니다.
// 현재 배경(size)의 높이와 텍스트(textRect) 영역 높이의 차이를 계산하여 상하 여백(margin)을 구합니다.
float marginHeight = rect.rect.height - textRect.rect.height;
// 배경의 높이를 '텍스트의 실제 높이(preferredHeight)' + '상하 여백'으로 설정하여 내용이 잘리지 않게 합니다.
rect.sizeDelta = new Vector2(rect.rect.width, detailTxt.preferredHeight + marginHeight);

View File

@@ -24,7 +24,7 @@ namespace UVC.Factory.Alarm
[Header("UI Layout Settings")]
[Tooltip("3D 설비 객체와 UI 아이콘 사이의 수직(Y) 간격입니다.")]
[SerializeField] private float objectYOffset = 0f;
[SerializeField] private float objectYOffset = 10f;
[Tooltip("아이콘을 펼쳤을 때 개별 아이콘 사이의 간격입니다.")]
[SerializeField] private float iconSpacing = 20f;
[Tooltip("아이콘을 펼쳤을 때의 중심점 X축 오프셋입니다.")]

View File

@@ -27,16 +27,21 @@ namespace UVC.Factory.Alarm
// Key: 설비 ID (TRANSPORT_EQP_ID), Value: 해당 설비에 연결된 AlarmIconManager 인스턴스
private Dictionary<string, AlarmIconManager> activeAlarmUIs = new Dictionary<string, AlarmIconManager>();
// 테스트용으로 사용할 AGV 이름 리스트입니다.
private List<string> agvNames = new List<string>();
// 어떤 알람(Id)이 어떤 AGV(TRANSPORT_EQP_ID)에 할당되었는지 추적하기 위한 딕셔너리입니다.
private Dictionary<string, string> alarmAgvNames = new Dictionary<string, string>();
// 씬에 있는 모든 FactoryObject를 관리하는 매니저의 참조입니다.
// 알람 데이터에 포함된 설비 ID를 이용해 실제 3D 객체를 찾기 위해 사용됩니다.
private FactoryObjectManager? dataManager;
private bool testMode = false; // 테스트 모드 여부를 나타내는 플래그입니다.
// 테스트용으로 사용할 AGV 이름 리스트입니다.
private List<string> agvNames = new List<string>();
// 테스트용으로 어떤 알람(Id)이 어떤 AGV(TRANSPORT_EQP_ID)에 할당되었는지 추적하기 위한 딕셔너리입니다.
private Dictionary<string, string> alarmAgvNames = new Dictionary<string, string>();
// 테스트용으로, 새로 발생하는 알람에 AGV ID를 순차적으로 할당하기 위한 인덱스입니다.
private int agvIdx = 50;
/// <summary>
/// AlarmManager의 초기화 메서드입니다.
@@ -57,12 +62,15 @@ namespace UVC.Factory.Alarm
// FactoryObjectManager의 인스턴스를 가져와 나중에 사용할 수 있도록 저장합니다.
dataManager = FactoryObjectManager.Instance;
// 테스트 코드: 실제 데이터가 없을 경우를 대비하여 가상의 AGV 이름 목록을 생성합니다.
// 현재는 알람 데이터에 AGV 정보가 없는 경우가 많아, 임시로 AGV 이름을 할당하기 위해 사용됩니다.
for (int i = 1; i <= 115; i++)
if (testMode)
{
//agvNames.Add($"HFF09CNA8{i.ToString("D3")}");
agvNames.Add($"HFF09CNA8061");
// 테스트 코드: 실제 데이터가 없을 경우를 대비하여 가상의 AGV 이름 목록을 생성합니다.
// 현재는 알람 데이터에 AGV 정보가 없는 경우가 많아, 임시로 AGV 이름을 할당하기 위해 사용됩니다.
for (int i = 1; i <= 115; i++)
{
//agvNames.Add($"HFF09CNA8{i.ToString("D3")}");
agvNames.Add($"HFF09CNA8061");
}
}
}
@@ -116,8 +124,7 @@ namespace UVC.Factory.Alarm
AppMain.Instance.MQTTPipeLine.Add(pipelineInfo);
}
// 테스트용으로, 새로 발생하는 알람에 AGV ID를 순차적으로 할당하기 위한 인덱스입니다.
int agvIdx = 50;
/// <summary>
/// MQTT 파이프라인으로부터 데이터가 업데이트될 때마다 호출되는 메인 핸들러입니다.
@@ -163,12 +170,15 @@ namespace UVC.Factory.Alarm
// 알람이 해제되지 않았고(CLEAR_TIME == null), 고유 ID가 있는 경우에만 신규 알람으로 처리합니다.
if (item.GetDateTime("CLEAR_TIME") == null && !item.Id.IsNullOrEmpty())
{
// 테스트 코드: 수신된 알람 데이터에 임시로 AGV ID를 할당합니다.
item["TRANSPORT_EQP_ID"] = agvNames[agvIdx];
alarmAgvNames.Add(item.Id!, agvNames[agvIdx]); // 알람 ID와 할당된 AGV ID를 매핑하여 저장합니다.
HandleNewAlarm(item); // 신규 알람 처리 로직 호출
agvIdx++;
if (agvIdx >= agvNames.Count) agvIdx = 0; // AGV ID를 순환하며 사용합니다.
if (testMode)
{
// 테스트 코드: 수신된 알람 데이터에 임시로 AGV ID를 할당합니다.
item["TRANSPORT_EQP_ID"] = agvNames[agvIdx];
alarmAgvNames.Add(item.Id!, agvNames[agvIdx]); // 알람 ID와 할당된 AGV ID를 매핑하여 저장합니다.
agvIdx++;
if (agvIdx >= agvNames.Count) agvIdx = 0; // AGV ID를 순환하며 사용합니다.
}
}
}
@@ -176,9 +186,12 @@ namespace UVC.Factory.Alarm
foreach (var item in ModifiedList.ToList())
{
// 해제되지 않았고, ID가 있으며, 이미 관리 중인 알람인 경우에만 수정 처리합니다.
if (item.GetDateTime("CLEAR_TIME") == null && !item.Id.IsNullOrEmpty() && alarmAgvNames.ContainsKey(item.Id!))
if (item.GetDateTime("CLEAR_TIME") == null && !item.Id.IsNullOrEmpty())
{
item["TRANSPORT_EQP_ID"] = alarmAgvNames[item.Id!]; // 기존에 할당된 AGV ID를 유지합니다.
if (testMode && alarmAgvNames.ContainsKey(item.Id!))
{
item["TRANSPORT_EQP_ID"] = alarmAgvNames[item.Id!]; // 기존에 할당된 AGV ID를 유지합니다.
}
HandleModifyAlarm(item); // 수정 알람 처리 로직 호출
}
}
@@ -187,9 +200,12 @@ namespace UVC.Factory.Alarm
foreach (var item in RemovedItems.ToList())
{
// ID가 있고, 관리 중인 알람인 경우에만 해제 처리합니다.
if (!item.Id.IsNullOrEmpty() && alarmAgvNames.ContainsKey(item.Id!))
if (!item.Id.IsNullOrEmpty())
{
item["TRANSPORT_EQP_ID"] = alarmAgvNames[item.Id!]; // 기존 AGV ID를 설정하여 어떤 UI를 제거할지 찾도록 합니다.
if (testMode && alarmAgvNames.ContainsKey(item.Id!))
{
item["TRANSPORT_EQP_ID"] = alarmAgvNames[item.Id!]; // 기존 AGV ID를 설정하여 어떤 UI를 제거할지 찾도록 합니다.
}
HandleClearedAlarm(item); // 해제 알람 처리 로직 호출
}
}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 07768d8eb217f394fb7610b292649f1c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,58 @@
using SampleProject;
using System.Collections.Generic;
using System.Linq;
using TMPro;
using UnityEngine;
using UVC.Locale;
namespace UVC.Factory.Buttons
{
public class UILanguageButton : MonoBehaviour
{
private TMP_Dropdown dropDown;
private Dictionary<string, string> languages;
void Awake()
{
SceneMain.Instance.Initialized += OnSceneInitialized;
}
private void OnSceneInitialized()
{
languages = LocalizationManager.Instance.AvailableDisplayLanguages;
var optoins = new List<TMP_Dropdown.OptionData>();
foreach (var language in languages)
{
optoins.Add(new TMP_Dropdown.OptionData(language.Value));
}
dropDown = GetComponent<TMP_Dropdown>();
dropDown.options = optoins;
dropDown.value = languages.Keys.ToList().IndexOf(LocalizationManager.Instance.CurrentLanguage);
dropDown.onValueChanged.AddListener(onValueChanged);
}
void OnDestroy()
{
SceneMain.Instance.Initialized -= OnSceneInitialized;
if (dropDown != null)
{
dropDown.onValueChanged.RemoveListener(onValueChanged);
dropDown = null;
}
}
private void onValueChanged(int value)
{
string selectedLanguage = languages.Keys.ToList()[value];
Debug.Log($"Selected Language: {selectedLanguage}");
LocalizationManager.Instance.SetCurrentLanguage(selectedLanguage);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 298abc08e9d2be149aebaa0a2d122619

View File

@@ -0,0 +1,131 @@
using Cysharp.Threading.Tasks;
using SampleProject;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using UVC.Factory.Component;
using UVC.Locale;
using UVC.UI.Modal;
using UVC.Util;
namespace UVC.Factory.Buttons
{
public class UISearchInput : MonoBehaviour
{
private TMP_InputField inputField;
private Button button;
private GameObject textArea;
private bool initialized = false;
private bool isClicked = false;
void Awake()
{
SceneMain.Instance.Initialized += OnSceneInitialized;
}
private void OnSceneInitialized()
{
inputField = GetComponent<TMP_InputField>();
button = GetComponentInChildren<Button>();
button.onClick.AddListener(() =>
{
isClicked = !isClicked;
if (isClicked)
{
//button.image.color = ColorUtil.FromHex("#00B0B0");
//textArea.gameObject.SetActive(true);
inputField.Select();
}
else
{
Location(inputField.text);
//button.image.color = Color.white;
//textArea.gameObject.SetActive(false);
inputField.OnDeselect(null);
}
});
textArea = transform.Find("Text Area").gameObject;
inputField.onEndEdit.AddListener(OnFindLocation);
//textArea.gameObject.SetActive(false);
Init();
}
private void OnFindLocation(string locationID)
{
if (isClicked == false)
return;
if (Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter))
{
Location(locationID);
isClicked = false;
button.image.color = Color.white;
//textArea.gameObject.SetActive(false);
inputField.OnDeselect(null);
}
}
private void Location(string locationID)
{
if (string.IsNullOrEmpty(locationID))
return;
FactoryObject? factoryObject = FactoryObjectManager.Instance.FindById(locationID);
if (factoryObject == null)
{
Alert.Show(LocalizationManager.Instance.GetString("warning"), locationID + " " +
LocalizationManager.Instance.GetString("nosearch")).Forget();
return;
}
FactoryCameraController.Instance.FocusOnTarget(factoryObject.transform.position, 15);
inputField.text = "";
}
private void Init()
{
if (!initialized)
{
inputField.placeholder.GetComponent<TextMeshProUGUI>().text = LocalizationManager.Instance.GetString("search_location");
initialized = true;
}
//textArea.gameObject.SetActive(false);
isClicked = false;
}
void OnDestroy()
{
SceneMain.Instance.Initialized -= OnSceneInitialized;
if (inputField != null)
{
inputField = null;
}
if (button != null)
{
button.onClick.RemoveAllListeners();
button = null;
}
}
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
if (EventSystem.current.currentSelectedGameObject != null)
return;
//textArea.gameObject.SetActive(false);
inputField.OnDeselect(null);
inputField.text = "";
button.image.color = Color.white;
isClicked = false;
}
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 836d6527858b7494297e122eb69601fd

View File

@@ -197,8 +197,8 @@ namespace UVC.Factory.Component
continue;
}
agv.Info = new FactoryObjectInfo(
item.GetString("VHL_NAME"),
item.GetString("NODE_ID"),
item.GetString("VHL_NAME"),
"",
"",
item.GetString("MODE")
@@ -243,6 +243,7 @@ namespace UVC.Factory.Component
protected override void OnDestroy()
{
base.OnDestroy();
SceneMain.Instance.Initialized -= OnSceneInitializedAsync;
AppMain.Instance.MQTTPipeLine.Remove("AGV");
agvPool?.ClearRecycledItems();
}

View File

@@ -12,17 +12,17 @@ namespace UVC.Locale
/// <code>
/// {
/// "languages": {
/// "en-US": "English",
/// "ko-KR": "한국어"
/// "en": "English",
/// "ko": "한국어"
/// },
/// "words": {
/// "error": {
/// "ko-KR": "에러",
/// "en-US": "Error"
/// "ko": "에러",
/// "en": "Error"
/// },
/// "button_ok": {
/// "ko-KR": "확인",
/// "en-US": "OK"
/// "ko": "확인",
/// "en": "OK"
/// }
/// }
/// }
@@ -33,11 +33,11 @@ namespace UVC.Locale
/// <summary>
/// 지원하는 언어의 코드와 표시 이름을 저장하는 딕셔너리입니다.
/// 키는 언어 코드(예: "en-US", "ko-KR")이며, 값은 해당 언어의 표시 이름(예: "English", "한국어")입니다.
/// 키는 언어 코드(예: "en", "ko")이며, 값은 해당 언어의 표시 이름(예: "English", "한국어")입니다.
/// </summary>
/// <example>
/// <code>
/// // Languages["en-US"] -> "English"
/// // Languages["en"] -> "English"
/// </code>
/// </example>
[JsonProperty("languages")]
@@ -47,11 +47,11 @@ namespace UVC.Locale
/// 실제 번역 데이터를 저장하는 딕셔너리입니다.
/// 첫 번째 키는 번역 키(예: "error", "button_ok")이며,
/// 값은 해당 번역 키에 대한 언어별 번역 문자열을 담는 또 다른 딕셔너리입니다.
/// 이 내부 딕셔너리의 키는 언어 코드(예: "en-US", "ko-KR")이고, 값은 번역된 텍스트입니다.
/// 이 내부 딕셔너리의 키는 언어 코드(예: "en", "ko")이고, 값은 번역된 텍스트입니다.
/// </summary>
/// <example>
/// <code>
/// // Words["error"]["en-US"] -> "Error"
/// // Words["error"]["en"] -> "Error"
/// </code>
/// </example>
[JsonProperty("words")]

View File

@@ -1,9 +1,11 @@
using System;
using System.Collections.Generic;
using System.IO;
using Unity.VisualScripting;
using UnityEngine;
using UVC.Json;
using UVC.Log;
using static Unity.VisualScripting.Icons;
namespace UVC.Locale
{
@@ -31,21 +33,21 @@ namespace UVC.Locale
/// ULog.Debug("다국어 데이터 로드 성공!");
///
/// // 4. 사용 가능한 언어 목록 확인 (언어 코드 기준)
/// List<string> availableLangCodes = LocalizationManager.Instance.GetAvailableLanguageCodes();
/// List<string> availableLangCodes = LocalizationManager.Instance.AvailableLanguages();
/// ULog.Debug("사용 가능한 언어 코드: " + string.Join(", ", availableLangCodes));
///
/// // 특정 언어 코드의 표시 이름 가져오기
/// string koreanDisplayName = LocalizationManager.Instance.GetLanguageDisplayName("ko-KR");
/// ULog.Debug($"ko-KR display name: {koreanDisplayName}"); // 출력: 한국어
/// string koreanDisplayName = LocalizationManager.Instance.GetLanguageDisplayName("ko");
/// ULog.Debug($"ko display name: {koreanDisplayName}"); // 출력: 한국어
///
/// // 5. 언어 변경
/// LocalizationManager.Instance.SetCurrentLanguage("ko-KR"); // 한국어로 변경
/// LocalizationManager.Instance.SetCurrentLanguage("ko"); // 한국어로 변경
///
/// // 6. 번역된 문자열 가져오기
/// string errorMsg = LocalizationManager.Instance.GetString("error");
/// ULog.Debug(errorMsg); // 현재 언어가 "ko-KR"이면 "에러" 출력
/// ULog.Debug(errorMsg); // 현재 언어가 "ko"이면 "에러" 출력
///
/// LocalizationManager.Instance.SetCurrentLanguage("en-US"); // 영어로 변경
/// LocalizationManager.Instance.SetCurrentLanguage("en"); // 영어로 변경
/// welcomeMsg = LocalizationManager.Instance.GetString("welcome_message");
/// ULog.Debug(welcomeMsg); // 출력 (영어): Welcome!
/// }
@@ -79,8 +81,8 @@ namespace UVC.Locale
{
if (_instance == null)
{
_instance = new LocalizationManager("ko-KR");
_instance.LoadDefaultLocalizationData(); // 기본 언어 데이터 로드
_instance = new LocalizationManager();
//_instance.LoadDefaultLocalizationData("ko"); // 기본 언어 데이터 로드
}
}
}
@@ -97,7 +99,7 @@ namespace UVC.Locale
/// <summary>
/// 언어가 변경되었을 때 발생하는 이벤트의 델리게이트입니다.
/// </summary>
/// <param name="newLanguageCode">새롭게 설정된 언어 코드입니다 (예: "en-US", "ko-KR").</param>
/// <param name="newLanguageCode">새롭게 설정된 언어 코드입니다 (예: "en", "ko").</param>
public delegate void LanguageChangedHandler(string newLanguageCode);
/// <summary>
/// 현재 언어가 <see cref="SetCurrentLanguage"/> 메서드를 통해 성공적으로 변경되었을 때 발생하는 이벤트입니다.
@@ -109,6 +111,38 @@ namespace UVC.Locale
/// </summary>
public string CurrentLanguage => _currentLanguage;
/// <summary>
/// 사용 가능한 언어 목록에서 현재 언어의 인덱스를 가져옵니다.
/// </summary>
public int CurrentLanguageIndex
{
get
{
if (_currentLanguage == null)
{
ULog.Warning("Current language is not set. Returning -1.");
return -1; // 언어가 설정되지 않은 경우 -1 반환
}
if (_dataSource?.Languages == null || _dataSource.Languages.Count == 0)
{
ULog.Warning("Languages data source is not loaded or empty. Returning -1.");
return -1; // 언어 데이터가 로드되지 않았거나 비어있는 경우 -1 반환
}
// AvailableLanguages를 통해 현재 언어의 인덱스를 찾습니다.
List<string> availableLanguages = AvailableLanguages;
int index = availableLanguages.IndexOf(_currentLanguage);
if (index != -1)
{
return index; // 현재 언어가 AvailableLanguages에 존재하는 경우 인덱스 반환
}
else
{
ULog.Warning($"Current language '{_currentLanguage}' not found in available languages. Returning -1.");
return -1; // 현재 언어가 AvailableLanguages에 없는 경우 -1 반환
}
}
}
/// <summary>
/// 로드된 다국어 데이터에서 사용 가능한 모든 언어 코드 목록을 가져옵니다.
/// 데이터가 로드되지 않았거나 번역 데이터가 비어있으면 빈 리스트를 반환합니다.
@@ -125,6 +159,22 @@ namespace UVC.Locale
}
}
/// <summary>
/// 사용 가능한 표시 언어 컬렉션을 가져옵니다.
/// ["en"] = "English", ["ko"] = "한국어" 형식의 KeyValuePair 컬렉션입니다.
/// </summary>
public Dictionary<string, string> AvailableDisplayLanguages
{
get
{
if (_dataSource?.Languages != null && _dataSource.Languages.Count > 0)
{
return new Dictionary<string, string>(_dataSource.Languages.AsReadOnlyCollection());
}
return new Dictionary<string, string>();
}
}
/// <summary>
/// 지정된 언어 코드에 해당하는 표시 이름을 가져옵니다.
/// </summary>
@@ -142,22 +192,22 @@ namespace UVC.Locale
/// <summary>
/// <see cref="LocalizationManager"/> 클래스의 새 인스턴스를 초기화합니다.
/// 기본 언어를 "ko-KR"로 설정합니다.
/// 기본 언어를 "ko"로 설정합니다.
/// 생성자를 private으로 변경하여 외부에서의 직접적인 인스턴스 생성을 막습니다.
/// </summary>
private LocalizationManager(string defaultLanguage = "ko-KR")
private LocalizationManager()
{
_dataSource = new LocalizationDataSource();
// 기본 언어를 설정하거나, 시스템 설정을 따르도록 초기화할 수 있습니다.
_currentLanguage = defaultLanguage; // 예시 기본 언어
}
/// <summary>
/// 기본 경로(<see cref="Application.streamingAssetsPath"/>/locale.json)에서 다국어 데이터를 로드합니다.
/// </summary>
/// <returns>데이터 로드 성공 시 true, 실패 시 false를 반환합니다.</returns>
public bool LoadDefaultLocalizationData()
public bool LoadDefaultLocalizationData(string defaultLanguage = "ko")
{
// 기본 언어를 설정하거나, 시스템 설정을 따르도록 초기화할 수 있습니다.
_currentLanguage = defaultLanguage; // 예시 기본 언어
string path = Path.Combine(Application.streamingAssetsPath, "locale.json");
return LoadLocalizationData(path);
}
@@ -216,7 +266,7 @@ namespace UVC.Locale
/// 현재 사용 언어를 변경합니다.
/// 성공적으로 언어가 변경되면 <see cref="OnLanguageChanged"/> 이벤트가 발생합니다.
/// </summary>
/// <param name="languageCode">설정할 언어 코드입니다 (예: "en-US", "ko-KR").</param>
/// <param name="languageCode">설정할 언어 코드입니다 (예: "en", "ko").</param>
public void SetCurrentLanguage(string languageCode)
{
if (string.IsNullOrEmpty(languageCode))

View File

@@ -243,8 +243,8 @@ namespace UVC.UI.Menu
model.MenuItems.Add(new MenuItemData("language", "menu_language", subMenuItems: new List<MenuItemData>
{
// 각 언어 메뉴 아이템에 ChangeLanguageCommand를 연결하여 언어 변경 기능 수행
new MenuItemData("lang_ko", "menu_lang_korean", new ChangeLanguageCommand("ko-KR"), commandParameter: "ko-KR"),
new MenuItemData("lang_en", "menu_lang_english", new ChangeLanguageCommand("en-US")),
new MenuItemData("lang_ko", "menu_lang_korean", new ChangeLanguageCommand("ko"), commandParameter: "ko"),
new MenuItemData("lang_en", "menu_lang_english", new ChangeLanguageCommand("en")),
new MenuItemData("file_save", "menu_file_save", command: new DebugLogCommand("저장 선택됨 (Command 실행)") , subMenuItems: new List<MenuItemData>
{
new MenuItemData("file_save_as", "menu_file_save_as", new DebugLogCommand("다른 이름으로 저장 선택됨 (Command 실행)"))
@@ -291,7 +291,7 @@ namespace UVC.UI.Menu
/// 새로운 언어 코드(<paramref name="newLanguageCode"/>)가 적용되었음을 감지하고,
/// <see cref="view"/>에 모든 메뉴 텍스트를 업데이트하도록 요청합니다.
/// </summary>
/// <param name="newLanguageCode">새롭게 설정된 언어 코드입니다 (예: "ko-KR", "en-US").</param>
/// <param name="newLanguageCode">새롭게 설정된 언어 코드입니다 (예: "ko", "en").</param>
protected virtual void HandleLanguageChanged(string newLanguageCode)
{
ULog.Debug($"언어 변경 감지됨: {newLanguageCode}. 메뉴 텍스트 업데이트를 시도합니다...");

View File

@@ -1,9 +1,9 @@
// Copyright (C) 2017 d.mind - All Rights Reserved
// Version 1.0.1
// Copyright (C) 2018 logonkhi@gmail.com - All Rights Reserved
// Version 1.0.0
using System;
using System.Collections;
using System.Runtime.InteropServices;
using System.Text;
using UnityEngine;
using UVC.Core;
@@ -104,178 +104,130 @@ namespace UVC.Util
/// WindowTools 클래스는 Unity 애플리케이션에서 창의 위치, 크기, 스타일 등을 제어하는 기능을 제공합니다.
/// 이 클래스는 Windows API를 활용하여 창의 속성을 변경하며, Unity 환경에서 실행 시 유용한 창 관리 기능을 제공합니다.
/// </summary>
public class WindowTools : SingletonApp<WindowTools>
public class WindowTools : Singleton<WindowTools>
{
[Serializable]
public class WindowInfoData
{
public class RectInfo
public enum WindowInfoDataWindowState
{
public int x; // 창의 X 좌표
public int y; // 창의 Y 좌표
public int width; // 창의 너비
public int height; // 창의 높이
FullScreen = 0, // 전체 화면 모드
Default = 1, // 기본 창 모드
Minimized = 2, // 최소화된 창 모드
Maximized = 3 // 최대화된 창 모드
}
[Tooltip("기능 사용 여부")]
public bool use = true;// 창 관리 기능 활성화 여부
public enum WindowInfoDataWindowHAlign
{
Left = 0, // 왼쪽 정렬
Center = 1, // 중앙 정렬
Right = 2, // 오른쪽 정렬
}
[Tooltip("창 표시 영역")]
public RectInfo rect = new RectInfo() { x = 0, y = 0, width = 1920, height = 1080 }; // 창의 초기 위치 및 크기
public enum WindowInfoDataWindowVAlign
{
Top = 0, // 상단 정렬
Center = 1, // 중앙 정렬
Bottom = 2, // 하단 정렬
}
[Tooltip("항상 최상위에 놓을지 여부")]
public bool alwaysTop = false; // 창을 항상 최상위로 유지할지 여부
// 전체 화면 모드에서 사용할 해상도
public Vector2Int fullScreenResolution = new Vector2Int(1920, 1080);
[Tooltip("창 테두리 표시 여부")]
public bool showBorder = true; // 창 테두리 표시 여부
// 창 크기
public Vector2Int size = new Vector2Int(1920, 1080);
[Tooltip("첫 실행 시 창 크기, 1:기본, 2:최소화, 3:최대화"), Range(1, 3)]
public int initWindowState = 1; // 창의 초기 상태 (기본, 최소화, 최대화)
// 창을 항상 최상위로 유지할지 여부
public bool alwaysTop = false;
[Tooltip("실행 딜레이 (단위:초)")]
public float startDelay = 0f; // 창 초기화 지연 시간
// 창 테두리 표시 여부
public bool showBorder = true;
[Tooltip("새 타이틀 명 (비어있으면 반영안됨)")]
public string newTitle = "Octopus"; // 창의 새 제목
// 창의 초기 상태 (풀스크린, 기본, 최소화, 최대화)
public WindowInfoDataWindowState initWindowState = WindowInfoDataWindowState.FullScreen;
// 가로 정렬
public WindowInfoDataWindowHAlign hAlign = WindowInfoDataWindowHAlign.Center;
// 세로 정렬
public WindowInfoDataWindowVAlign vAlign = WindowInfoDataWindowVAlign.Center;
// 새 타이틀 명 (비어있으면 반영안됨)
public string title = "Octopus";
}
private WindowInfoData WindowInfo = new WindowInfoData();
private WindowInfoData WindowInfo;
private IntPtr _hwnd; // 창 핸들
private long _old; // 이전 창 스타일
private string _filePath; // 파일 경로
private int screenWidth; // 화면 너비
private int screenHeight; // 화면 높이
private int startWidth; // 초기 창 너비
private int startHeight; // 초기 창 높이
/// <summary>
/// Unity 애플리케이션 시작 시 창의 초기 위치와 크기를 설정합니다.
/// 창의 초기 위치와 크기를 설정합니다.
/// </summary>
private void Start()
public void Init(WindowInfoData windowInfo)
{
DisplayInfo displayInfo = Screen.mainWindowDisplayInfo;
// 화면 해상도 계산
screenWidth = int.Parse(displayInfo.workArea.width.ToString()) + 14;// Screen.width; 14:그림자
screenHeight = int.Parse(displayInfo.workArea.height.ToString()) + 7;// creen.height; 7:그림자
startWidth = 350 + 14;
startHeight = 606 + 7;
int centerX = ((screenWidth - startWidth) / 2);
int centerY = ((screenHeight - startHeight) / 2);
WindowInfo.rect.x = centerX;
WindowInfo.rect.y = centerY;
WindowInfo.rect.width = startWidth;
WindowInfo.rect.height = startHeight;
this.WindowInfo = windowInfo;
#if !UNITY_EDITOR || UNITY_STANDALONE_OSX || UNITY_STANDALONE_WIN
Screen.MoveMainWindowTo(displayInfo, new Vector2Int(centerX, centerY));
// 창 관리 기능 활성화 시 초기화 수행
if (WindowInfo.use)
// 풀스크린인지 확인
if (WindowInfo.initWindowState == WindowInfoData.WindowInfoDataWindowState.FullScreen)
{
StartCoroutine(Initialize());
Screen.SetResolution(WindowInfo.fullScreenResolution.x, WindowInfo.fullScreenResolution.y, true);
Screen.fullScreenMode = FullScreenMode.FullScreenWindow;
return;
}
Initialize();
#endif
}
/// <summary>
///
/// 애플리케이션 종료 시 창의 크기를 저장합니다.
/// </summary>
private void OnApplicationQuit()
{
PlayerPrefs.SetInt("Screenmanager Resolution Width", startWidth);
PlayerPrefs.SetInt("Screenmanager Resolution Height", startHeight);
PlayerPrefs.Save();
}
//private void Update()
//{
// if (Input.GetKeyDown(KeyCode.Space))
// {
// SaveData();
// }
// if (Input.GetKeyDown(KeyCode.Q))
// {
// SetWindowPosition(100, 100);
// }
// if (Input.GetKeyDown(KeyCode.W))
// {
// SetWindowPosition(0, 0);
// }
// if (Input.GetKeyDown(KeyCode.A))
// {
// SetWindowSize(800, 600);
// }
// if (Input.GetKeyDown(KeyCode.S))
// {
// SetWindowSize(1280, 900);
// }
// if (Input.GetKeyDown(KeyCode.Z))
// {
// ShowBorder();
// }
// if (Input.GetKeyDown(KeyCode.X))
// {
// HideBorder();
// }
// if (Input.GetKeyDown(KeyCode.Alpha1))
// {
// NormalizeWindow();
// }
// if (Input.GetKeyDown(KeyCode.Alpha2))
// {
// MinimizeWindow();
// }
// if (Input.GetKeyDown(KeyCode.Alpha3))
// {
// MaximizeWindow();
// }
// if (Input.GetKeyDown(KeyCode.Alpha4))
// {
// SetWindowTitle("Window1");
// }
// if (Input.GetKeyDown(KeyCode.Alpha5))
// {
// SetWindowTitle("Window2");
// }
// if (Input.GetKeyDown(KeyCode.Alpha6))
// {
// SetAlphaWindow(0.3f);
// }
// if (Input.GetKeyDown(KeyCode.Alpha7))
// {
// SetAlphaWindow(1f);
// }
//}
/// <summary>
/// 창 초기화 작업을 수행합니다.
/// </summary>
/// <returns>코루틴</returns>
private IEnumerator Initialize()
private void Initialize()
{
#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
//if (!Application.isEditor && Application.platform == RuntimePlatform.WindowsPlayer)
#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
_hwnd = GetWindowHandle();//FindWindow("UnityWndClass", Application.productName);
_old = GetWindowLong(_hwnd, (long)GWLWindowStyles.GWL_STYLE);
yield return new WaitForSeconds(this.WindowInfo.startDelay);
int hWndInsertAfter = (this.WindowInfo.alwaysTop) ? -1 : 0;
Rect winRect = new Rect(WindowInfo.rect.x, WindowInfo.rect.y, WindowInfo.rect.width, WindowInfo.rect.height);
Rect winRect = new Rect(0, 0, WindowInfo.size.x, WindowInfo.size.y);
//정렬된 창 크기 설정
switch (WindowInfo.hAlign)
{
case WindowInfoData.WindowInfoDataWindowHAlign.Left:
winRect.x = 0;
break;
case WindowInfoData.WindowInfoDataWindowHAlign.Center:
winRect.x = (Screen.width - winRect.width) / 2;
break;
case WindowInfoData.WindowInfoDataWindowHAlign.Right:
winRect.x = Screen.width - winRect.width;
break;
}
switch (WindowInfo.vAlign)
{
case WindowInfoData.WindowInfoDataWindowVAlign.Top:
winRect.y = 0;
break;
case WindowInfoData.WindowInfoDataWindowVAlign.Center:
winRect.y = (Screen.height - winRect.height) / 2;
break;
case WindowInfoData.WindowInfoDataWindowVAlign.Bottom:
winRect.y = Screen.height - winRect.height;
break;
}
SetActiveWindow(_hwnd);
if (!WindowInfo.showBorder)
@@ -285,16 +237,16 @@ namespace UVC.Util
SetWindowPos(_hwnd, hWndInsertAfter, (int)winRect.x, (int)winRect.y, (int)winRect.width, (int)winRect.height, (uint)WindowToolsFlags.SWP_SHOWWINDOW);
if(!string.IsNullOrEmpty(WindowInfo.newTitle.Trim()))
if (!string.IsNullOrEmpty(WindowInfo.title.Trim()))
{
SetWindowTitle(WindowInfo.newTitle);
SetWindowTitle(WindowInfo.title);
}
if(WindowInfo.initWindowState == 2)
if (WindowInfo.initWindowState == WindowInfoData.WindowInfoDataWindowState.Minimized)
{
MinimizeWindow();
}
else if(WindowInfo.initWindowState == 3)
else if (WindowInfo.initWindowState == WindowInfoData.WindowInfoDataWindowState.Maximized)
{
MaximizeWindow();
}
@@ -302,8 +254,7 @@ namespace UVC.Util
{
NormalizeWindow();
}
#endif
yield return null;
#endif
}
@@ -314,9 +265,6 @@ namespace UVC.Util
/// <param name="y">창의 Y 좌표</param>
public void SetWindowPosition(int x, int y)
{
WindowInfo.rect.x = x;
WindowInfo.rect.y = y;
#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
int hWndInsertAfter = (this.WindowInfo.alwaysTop) ? -1 : 0;
SetWindowPos(_hwnd, hWndInsertAfter, x, y, 0, 0, (UInt32)(WindowToolsFlags.SWP_NOSIZE | WindowToolsFlags.SWP_NOZORDER | WindowToolsFlags.SWP_DRAWFRAME));
@@ -330,9 +278,6 @@ namespace UVC.Util
/// <param name="h">창의 높이</param>
public void SetWindowSize(int w, int h)
{
WindowInfo.rect.width = w;
WindowInfo.rect.height = h;
#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
int hWndInsertAfter = (this.WindowInfo.alwaysTop) ? -1 : 0;
SetWindowPos(_hwnd, hWndInsertAfter, 0, 0, w, h, (UInt32)(WindowToolsFlags.SWP_NOMOVE | WindowToolsFlags.SWP_NOZORDER | WindowToolsFlags.SWP_DRAWFRAME));
@@ -352,8 +297,6 @@ namespace UVC.Util
/// </summary>
public void ShowBorder()
{
this.WindowInfo.showBorder = true;
#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
SetActiveWindow(_hwnd);
SetWindowLong(_hwnd, (int)GWLWindowStyles.GWL_STYLE, (int)_old);
@@ -366,8 +309,6 @@ namespace UVC.Util
/// </summary>
public void HideBorder()
{
this.WindowInfo.showBorder = false;
#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
SetActiveWindow(_hwnd);
SetWindowLong(_hwnd, (int)GWLWindowStyles.GWL_STYLE, 1);
@@ -392,20 +333,11 @@ namespace UVC.Util
#endif
}
//public void SetAlwaysTop(bool alwaysTop)
//{
// this.WindowInfo.alwaysTop = alwaysTop;
// StopAllCoroutines();
// StartCoroutine(Init());
//}
/// <summary>
/// 윈도우 창을 기본 상태로 설정합니다.
/// </summary>
public void NormalizeWindow()
{
this.WindowInfo.initWindowState = 1;
#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
ShowWindowAsync(_hwnd, 1);
#endif
@@ -416,8 +348,6 @@ namespace UVC.Util
/// </summary>
public void MinimizeWindow()
{
this.WindowInfo.initWindowState = 2;
#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
ShowWindowAsync(_hwnd, 2);
#endif
@@ -428,8 +358,6 @@ namespace UVC.Util
/// </summary>
public void MaximizeWindow()
{
this.WindowInfo.initWindowState = 3;
#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
ShowWindowAsync(_hwnd, 3);
#endif
@@ -441,8 +369,6 @@ namespace UVC.Util
/// <param name="newTitle">새로운 창 제목</param>
public void SetWindowTitle(string newTitle)
{
this.WindowInfo.newTitle = newTitle;
#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
SetWindowText(_hwnd, newTitle);
#endif
@@ -471,7 +397,7 @@ namespace UVC.Util
/// <returns>사용자가 선택한 버튼의 결과 (OK, CANCEL, ABORT, RETRY, IGNORE, YES, NO, TRY AGAIN)</returns>
public static string Alert(string title, string message, string type = "OK")
{
//#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
try
{
string DialogResult = string.Empty;
@@ -555,7 +481,8 @@ namespace UVC.Util
{
return string.Empty;
}
//#endif
#endif
return string.Empty;
}
@@ -625,6 +552,6 @@ namespace UVC.Util
[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
static extern int MessageBox(IntPtr hwnd, String lpText, String lpCaption, uint uType);
#endregion
#endregion
}
}

View File

@@ -0,0 +1,20 @@
{
"language": "ko",
"fullScreenResolution": null,
"window": {
"fullScreenResolution": {
"x": 1920,
"y": 1080
},
"size": {
"x": 1920,
"y": 1080
},
"alwaysTop": false,
"showBorder": true,
"initWindowState": "FullScreen",
"hAlign": "Center",
"vAlign": "Center",
"title": "Octopus"
}
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5270f95da5f91444e969252bc6d85fd6
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,328 +1,336 @@
{
"languages": {
"en-US": "English",
"ko-KR": "한국어"
"ko": "KOR",
"en": "ENG"
},
"words": {
"error": {
"ko-KR": "에러",
"en-US": "Error"
"ko": "에러",
"en": "Error"
},
"error_file_not_found": {
"ko-KR": "파일을 찾을 수 없습니다.",
"en-US": "File not found."
"ko": "파일을 찾을 수 없습니다.",
"en": "File not found."
},
"error_network_not": {
"ko-KR": "네트워크 연결을 확인해주세요.",
"en-US": "Please check your network connection."
"ko": "네트워크 연결을 확인해주세요.",
"en": "Please check your network connection."
},
"nosearch": {
"ko": "찾을 수 없습니다.",
"en": "Not found."
},
"search_location": {
"ko": "위치 검색",
"en": "Search Location"
},
"button_confirm": {
"ko-KR": "확인",
"en-US": "Confirm"
"ko": "확인",
"en": "Confirm"
},
"button_ok": {
"ko-KR": "확인",
"en-US": "OK"
"ko": "확인",
"en": "OK"
},
"button_yes": {
"ko-KR": "예",
"en-US": "Yes"
"ko": "예",
"en": "Yes"
},
"button_no": {
"ko-KR": "아니오",
"en-US": "No"
"ko": "아니오",
"en": "No"
},
"button_cancel": {
"ko-KR": "취소",
"en-US": "Cancel"
"ko": "취소",
"en": "Cancel"
},
"button_close": {
"ko-KR": "닫기",
"en-US": "Close"
"ko": "닫기",
"en": "Close"
},
"button_save": {
"ko-KR": "저장",
"en-US": "Save"
"ko": "저장",
"en": "Save"
},
"button_delete": {
"ko-KR": "삭제",
"en-US": "Delete"
"ko": "삭제",
"en": "Delete"
},
"button_edit": {
"ko-KR": "편집",
"en-US": "Edit"
"ko": "편집",
"en": "Edit"
},
"button_add": {
"ko-KR": "추가",
"en-US": "Add"
"ko": "추가",
"en": "Add"
},
"button_back": {
"ko-KR": "뒤로",
"en-US": "Back"
"ko": "뒤로",
"en": "Back"
},
"button_next": {
"ko-KR": "다음",
"en-US": "Next"
"ko": "다음",
"en": "Next"
},
"button_previous": {
"ko-KR": "이전",
"en-US": "Previous"
"ko": "이전",
"en": "Previous"
},
"button_finish": {
"ko-KR": "완료",
"en-US": "Finish"
"ko": "완료",
"en": "Finish"
},
"button_help": {
"ko-KR": "도움말",
"en-US": "Help"
"ko": "도움말",
"en": "Help"
},
"button_search": {
"ko-KR": "검색",
"en-US": "Search"
"ko": "검색",
"en": "Search"
},
"button_refresh": {
"ko-KR": "새로 고침",
"en-US": "Refresh"
"ko": "새로 고침",
"en": "Refresh"
},
"button_upload": {
"ko-KR": "업로드",
"en-US": "Upload"
"ko": "업로드",
"en": "Upload"
},
"button_download": {
"ko-KR": "다운로드",
"en-US": "Download"
"ko": "다운로드",
"en": "Download"
},
"button_print": {
"ko-KR": "인쇄",
"en-US": "Print"
"ko": "인쇄",
"en": "Print"
},
"button_settings": {
"ko-KR": "설정",
"en-US": "Settings"
"ko": "설정",
"en": "Settings"
},
"button_logout": {
"ko-KR": "로그아웃",
"en-US": "Logout"
"ko": "로그아웃",
"en": "Logout"
},
"button_login": {
"ko-KR": "로그인",
"en-US": "Login"
"ko": "로그인",
"en": "Login"
},
"button_register": {
"ko-KR": "회원가입",
"en-US": "Register"
"ko": "회원가입",
"en": "Register"
},
"button_view": {
"ko-KR": "보기",
"en-US": "View"
"ko": "보기",
"en": "View"
},
"button_select": {
"ko-KR": "선택",
"en-US": "Select"
"ko": "선택",
"en": "Select"
},
"button_clear": {
"ko-KR": "지우기",
"en-US": "Clear"
"ko": "지우기",
"en": "Clear"
},
"button_continue": {
"ko-KR": "계속",
"en-US": "Continue"
"ko": "계속",
"en": "Continue"
},
"button_apply": {
"ko-KR": "적용",
"en-US": "Apply"
"ko": "적용",
"en": "Apply"
},
"button_cancel_changes": {
"ko-KR": "변경사항 취소",
"en-US": "Cancel Changes"
"ko": "변경사항 취소",
"en": "Cancel Changes"
},
"button_confirm_changes": {
"ko-KR": "변경사항 확인",
"en-US": "Confirm Changes"
"ko": "변경사항 확인",
"en": "Confirm Changes"
},
"button_exit": {
"ko-KR": "종료",
"en-US": "Exit"
"ko": "종료",
"en": "Exit"
},
"button_yes_no": {
"ko-KR": "예/아니오",
"en-US": "Yes/No"
"ko": "예/아니오",
"en": "Yes/No"
},
"button_accept": {
"ko-KR": "수락",
"en-US": "Accept"
"ko": "수락",
"en": "Accept"
},
"button_decline": {
"ko-KR": "거절",
"en-US": "Decline"
"ko": "거절",
"en": "Decline"
},
"button_agree": {
"ko-KR": "동의",
"en-US": "Agree"
"ko": "동의",
"en": "Agree"
},
"button_disagree": {
"ko-KR": "동의하지 않음",
"en-US": "Disagree"
"ko": "동의하지 않음",
"en": "Disagree"
},
"button_submit": {
"ko-KR": "제출",
"en-US": "Submit"
"ko": "제출",
"en": "Submit"
},
"button_reset": {
"ko-KR": "초기화",
"en-US": "Reset"
"ko": "초기화",
"en": "Reset"
},
"button_retry": {
"ko-KR": "재시도",
"en-US": "Retry"
"ko": "재시도",
"en": "Retry"
},
"button_mute": {
"ko-KR": "음소거",
"en-US": "Mute"
"ko": "음소거",
"en": "Mute"
},
"button_brush_size": {
"ko-KR": "브러시 크기",
"en-US": "Brush Size"
"ko": "브러시 크기",
"en": "Brush Size"
},
"button_capture_screen": {
"ko-KR": "화면 캡처",
"en-US": "Capture Screen"
"ko": "화면 캡처",
"en": "Capture Screen"
},
"button_record_screen": {
"ko-KR": "화면 녹화",
"en-US": "Record Screen"
"ko": "화면 녹화",
"en": "Record Screen"
},
"menu": {
"ko-KR": "메뉴",
"en-US": "Menu"
"ko": "메뉴",
"en": "Menu"
},
"menu_file": {
"ko-KR": "파일",
"en-US": "File"
"ko": "파일",
"en": "File"
},
"menu_file_new": {
"ko-KR": "새로 만들기",
"en-US": "New"
"ko": "새로 만들기",
"en": "New"
},
"menu_file_new_project": {
"ko-KR": "프로젝트...",
"en-US": "Project..."
"ko": "프로젝트...",
"en": "Project..."
},
"menu_file_new_file": {
"ko-KR": "파일...",
"en-US": "File..."
"ko": "파일...",
"en": "File..."
},
"menu_file_open": {
"ko-KR": "열기",
"en-US": "Open"
"ko": "열기",
"en": "Open"
},
"menu_file_save": {
"ko-KR": "저장",
"en-US": "Save"
"ko": "저장",
"en": "Save"
},
"menu_file_save_as": {
"ko-KR": "다른 이름으로 저장...",
"en-US": "Save As..."
"ko": "다른 이름으로 저장...",
"en": "Save As..."
},
"menu_file_exit": {
"ko-KR": "종료",
"en-US": "Exit"
"ko": "종료",
"en": "Exit"
},
"menu_edit": {
"ko-KR": "편집",
"en-US": "Edit"
"ko": "편집",
"en": "Edit"
},
"menu_edit_undo": {
"ko-KR": "실행 취소",
"en-US": "Undo"
"ko": "실행 취소",
"en": "Undo"
},
"menu_edit_redo": {
"ko-KR": "다시 실행",
"en-US": "Redo"
"ko": "다시 실행",
"en": "Redo"
},
"menu_preferences": {
"ko-KR": "환경설정",
"en-US": "Preferences"
"ko": "환경설정",
"en": "Preferences"
},
"menu_language": {
"ko-KR": "언어",
"en-US": "Language"
"ko": "언어",
"en": "Language"
},
"menu_lang_korean": {
"ko-KR": "한국어",
"en-US": "Korean"
"ko": "한국어",
"en": "Korean"
},
"menu_lang_english": {
"ko-KR": "영어",
"en-US": "English"
"ko": "영어",
"en": "English"
},
"menu_help": {
"ko-KR": "도움말",
"en-US": "Help"
"ko": "도움말",
"en": "Help"
},
"menu_about": {
"ko-KR": "정보",
"en-US": "About"
"ko": "정보",
"en": "About"
},
"tool_pen": {
"ko-KR": "펜",
"en-US": "Pen"
"ko": "펜",
"en": "Pen"
},
"tool_eraser": {
"ko-KR": "지우개",
"en-US": "Eraser"
"ko": "지우개",
"en": "Eraser"
},
"project_settings": {
"ko-KR": "프로젝트 설정",
"en-US": "Project Setting"
"ko": "프로젝트 설정",
"en": "Project Setting"
},
"warning": {
"ko-KR": "경고",
"en-US": "Warning"
"ko": "경고",
"en": "Warning"
},
"brush_size_small": {
"ko-KR": "작은 브러시",
"en-US": "Small Brush"
"ko": "작은 브러시",
"en": "Small Brush"
},
"brush_size_medium": {
"ko-KR": "중간 브러시",
"en-US": "Medium Brush"
"ko": "중간 브러시",
"en": "Medium Brush"
},
"tooltip_save_button": {
"ko-KR": "저장 버튼을 클릭하여 현재 작업을 저장합니다.",
"en-US": "Click the save button to save your current work."
"ko": "저장 버튼을 클릭하여 현재 작업을 저장합니다.",
"en": "Click the save button to save your current work."
},
"tooltip_mute_button": {
"ko-KR": "음소거 버튼을 클릭하여 소리를 끕니다.",
"en-US": "Click the mute button to turn off the sound."
"ko": "음소거 버튼을 클릭하여 소리를 끕니다.",
"en": "Click the mute button to turn off the sound."
},
"tooltip_pen_tool": {
"ko-KR": "펜 도구를 선택하여 그림을 그립니다.",
"en-US": "Select the pen tool to draw."
"ko": "펜 도구를 선택하여 그림을 그립니다.",
"en": "Select the pen tool to draw."
},
"tooltip_eraser_tool": {
"ko-KR": "지우개 도구를 선택하여 그림을 지웁니다.",
"en-US": "Select the eraser tool to erase drawings."
"ko": "지우개 도구를 선택하여 그림을 지웁니다.",
"en": "Select the eraser tool to erase drawings."
},
"tooltip_brush_size": {
"ko-KR": "브러시 크기를 조정합니다.",
"en-US": "Adjust the brush size."
"ko": "브러시 크기를 조정합니다.",
"en": "Adjust the brush size."
},
"tooltip_brush_small": {
"ko-KR": "작은 브러시를 선택합니다.",
"en-US": "Select small brush."
"ko": "작은 브러시를 선택합니다.",
"en": "Select small brush."
},
"tooltip_brush_medium": {
"ko-KR": "중간 브러시를 선택합니다.",
"en-US": "Select medium brush."
"ko": "중간 브러시를 선택합니다.",
"en": "Select medium brush."
},
"tooltip_capture_screen": {
"ko-KR": "화면을 캡처 합니다.",
"en-US": "Capture the screen."
"ko": "화면을 캡처 합니다.",
"en": "Capture the screen."
},
"tooltip_record_screen": {
"ko-KR": "화면을 녹화 합니다.",
"en-US": "Record your screen."
"ko": "화면을 녹화 합니다.",
"en": "Record your screen."
}
}
}