From 4c480241ab96869a407cdc45f856461affa4da24 Mon Sep 17 00:00:00 2001 From: "aube.lee" Date: Wed, 26 Feb 2025 21:31:36 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=9D=B8=EA=B2=8C=EC=9E=84=20=ED=94=8C?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=20=EC=8B=9C=EA=B0=84=20=EB=85=B8=EC=B6=9C?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=A1=B0=EA=B1=B4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Resources/UI/Prefabs/UI.InGameUI.prefab | 375 +++++++++++++++++- .../Gameton/Scripts/GameStage/StageManager.cs | 3 + .../Assets/Gameton/Scripts/UI/IngameUI.cs | 39 +- .../Assets/Gameton/Scripts/UI/OptionUI.cs | 2 +- 4 files changed, 399 insertions(+), 20 deletions(-) diff --git a/Gameton-06/Assets/Gameton/Resources/UI/Prefabs/UI.InGameUI.prefab b/Gameton-06/Assets/Gameton/Resources/UI/Prefabs/UI.InGameUI.prefab index fb384d9e..2819adfe 100644 --- a/Gameton-06/Assets/Gameton/Resources/UI/Prefabs/UI.InGameUI.prefab +++ b/Gameton-06/Assets/Gameton/Resources/UI/Prefabs/UI.InGameUI.prefab @@ -1,5 +1,139 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &235745522344432780 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3947884144583947445} + - component: {fileID: 6589422196124071301} + - component: {fileID: 4621789781371979516} + m_Layer: 5 + m_Name: Play Time Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3947884144583947445 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 235745522344432780} + 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: 6121660253025211306} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 10} + m_SizeDelta: {x: 0, y: 50} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &6589422196124071301 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 235745522344432780} + m_CullTransparentMesh: 1 +--- !u!114 &4621789781371979516 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 235745522344432780} + 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: play time 00:00 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: b43a164f1c9ce804bab1090e60c159b4, type: 2} + m_sharedMaterial: {fileID: 2333603320826562980, guid: b43a164f1c9ce804bab1090e60c159b4, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, 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: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + 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_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 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 &373887944214037986 GameObject: m_ObjectHideFlags: 0 @@ -188,6 +322,83 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1915959884078846517 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6121660253025211306} + - component: {fileID: 3264170675983365161} + - component: {fileID: 5681840541640403356} + m_Layer: 0 + m_Name: Stage Infomation + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6121660253025211306 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915959884078846517} + 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: 3947884144583947445} + - {fileID: 5805654628529440076} + m_Father: {fileID: 3954124197450694553} + 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: 500, y: 0} + m_SizeDelta: {x: 400, y: 160} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3264170675983365161 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915959884078846517} + m_CullTransparentMesh: 1 +--- !u!114 &5681840541640403356 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915959884078846517} + 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: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 042147ed597077d428e0bfc7a9c418a3, 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!1 &2230928671015106332 GameObject: m_ObjectHideFlags: 0 @@ -306,10 +517,9 @@ MonoBehaviour: characterImage: {fileID: 4779274100179459256} hpBar: {fileID: 8343011096442902954} spBar: {fileID: 7703838897355702313} - stageText: {fileID: 8879455789073944256} - monsterHp: {fileID: 5427279369348982334} - monsterHpBar: {fileID: 713119143775663342} - monsterImage: {fileID: 3115676712305369735} + waveText: {fileID: 8879455789073944256} + playTimeText: {fileID: 4621789781371979516} + scoreText: {fileID: 18395332886957268} character: {fileID: 0} --- !u!1 &2837283741072849140 GameObject: @@ -323,7 +533,7 @@ GameObject: - component: {fileID: 5379103227928931883} - component: {fileID: 8879455789073944256} m_Layer: 5 - m_Name: StageText + m_Name: Wave Count m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -343,11 +553,11 @@ RectTransform: m_Children: [] m_Father: {fileID: 3954124197450694553} 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: -300, y: 40} - m_SizeDelta: {x: 200, y: 50} - m_Pivot: {x: 1, y: 0.5} + 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: 400, y: 100} + m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &5379103227928931883 CanvasRenderer: m_ObjectHideFlags: 0 @@ -376,10 +586,10 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_text: Stage + m_text: wave 1 m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontAsset: {fileID: 11400000, guid: b43a164f1c9ce804bab1090e60c159b4, type: 2} + m_sharedMaterial: {fileID: 2333603320826562980, guid: b43a164f1c9ce804bab1090e60c159b4, type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -409,7 +619,7 @@ MonoBehaviour: m_enableAutoSizing: 0 m_fontSizeMin: 18 m_fontSizeMax: 72 - m_fontStyle: 0 + m_fontStyle: 16 m_HorizontalAlignment: 2 m_VerticalAlignment: 512 m_textAlignment: 65535 @@ -474,8 +684,9 @@ RectTransform: m_ConstrainProportionsScale: 1 m_Children: - {fileID: 5891565712165530425} - - {fileID: 8456465457182026322} - {fileID: 1442053628981883187} + - {fileID: 8456465457182026322} + - {fileID: 6121660253025211306} m_Father: {fileID: 5957244545150369457} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} @@ -806,6 +1017,140 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6523729306893825036 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5805654628529440076} + - component: {fileID: 7135252859325406355} + - component: {fileID: 18395332886957268} + m_Layer: 5 + m_Name: Score Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5805654628529440076 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6523729306893825036} + 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: 6121660253025211306} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: -10} + m_SizeDelta: {x: 0, y: 50} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &7135252859325406355 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6523729306893825036} + m_CullTransparentMesh: 1 +--- !u!114 &18395332886957268 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6523729306893825036} + 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: 'score : 00' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: b43a164f1c9ce804bab1090e60c159b4, type: 2} + m_sharedMaterial: {fileID: 2333603320826562980, guid: b43a164f1c9ce804bab1090e60c159b4, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, 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: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + 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_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 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 &6581386796333780369 GameObject: m_ObjectHideFlags: 0 diff --git a/Gameton-06/Assets/Gameton/Scripts/GameStage/StageManager.cs b/Gameton-06/Assets/Gameton/Scripts/GameStage/StageManager.cs index 3bdb270d..4af41d79 100644 --- a/Gameton-06/Assets/Gameton/Scripts/GameStage/StageManager.cs +++ b/Gameton-06/Assets/Gameton/Scripts/GameStage/StageManager.cs @@ -12,6 +12,9 @@ namespace TON public SerializableDictionary bestStageClearDict = new SerializableDictionary(); + // 현재 플레이 시간을 초 단위로 반환하는 프로퍼티 + public float PlayTime => Time.time - stageStartTime; + private float stageStartTime; // 스테이지 시작 시간 private string stageId; // 스테이지 아이디 diff --git a/Gameton-06/Assets/Gameton/Scripts/UI/IngameUI.cs b/Gameton-06/Assets/Gameton/Scripts/UI/IngameUI.cs index ebe761a9..b7c4be51 100644 --- a/Gameton-06/Assets/Gameton/Scripts/UI/IngameUI.cs +++ b/Gameton-06/Assets/Gameton/Scripts/UI/IngameUI.cs @@ -14,10 +14,18 @@ namespace TON public Image hpBar; public Image spBar; - public TextMeshProUGUI stageText; - public TextMeshProUGUI monsterHp; - public Image monsterHpBar; - public Image monsterImage; + public TextMeshProUGUI waveText; + public TextMeshProUGUI playTimeText; + public TextMeshProUGUI scoreText; + + // 플레이 시간 노출하게 하는 변수 + private int lastMinutes = -1; + private int lastSeconds = -1; + private string cachedTimeString = "00:00"; + + // public TextMeshProUGUI monsterHp; + // public Image monsterHpBar; + // public Image monsterImage; private string playerType; @@ -49,6 +57,29 @@ namespace TON } } + + private void Update() + { + UpdatePlayTimeDisplay(); + } + + private void UpdatePlayTimeDisplay() + { + float playTime = StageManager.Singleton.PlayTime; + + int minutes = Mathf.FloorToInt(playTime / 60f); + int seconds = Mathf.FloorToInt(playTime % 60f); + + // 시간이 변경된 경우에만 문자열 생성 + if (minutes != lastMinutes || seconds != lastSeconds) + { + lastMinutes = minutes; + lastSeconds = seconds; + cachedTimeString = $"time {minutes:00}:{seconds:00}"; + playTimeText.text = cachedTimeString; + } + } + private void UpdateHPBar(float current, float max) { hpBar.fillAmount = current / max; diff --git a/Gameton-06/Assets/Gameton/Scripts/UI/OptionUI.cs b/Gameton-06/Assets/Gameton/Scripts/UI/OptionUI.cs index c50af75b..347f8db1 100644 --- a/Gameton-06/Assets/Gameton/Scripts/UI/OptionUI.cs +++ b/Gameton-06/Assets/Gameton/Scripts/UI/OptionUI.cs @@ -34,7 +34,7 @@ namespace TON { goldObject.SetActive(false); fishObject.SetActive(false); - inventoryObject.SetActive(true); + inventoryObject.SetActive(false); settingObject.SetActive(false); parseObject.SetActive(true); }