From 7e63cd2621e5d073d4172b6349f38d81d98224e1 Mon Sep 17 00:00:00 2001 From: "aube.lee" Date: Sat, 8 Feb 2025 12:35:14 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8A=A4=ED=82=AC=20=EB=B2=84=ED=8A=BC=20?= =?UTF-8?q?=EB=8F=99=EC=9E=91=20=EA=B5=AC=ED=98=84=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UI/Prefabs/Buttons/Skill Button.prefab | 230 +++++++++++++++++- .../Scripts/Character/Skill/SkillBase.cs | 31 +++ .../Scripts/Character/Skill/SkillBase.cs.meta | 11 + .../Character/Skill/SkillDataManager.cs | 5 + .../Assets/Gameton/Scripts/UI/ControllerUI.cs | 12 + .../Scripts/UI/ControllerUI_SkillButton.cs | 17 +- 6 files changed, 301 insertions(+), 5 deletions(-) create mode 100644 Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillBase.cs create mode 100644 Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillBase.cs.meta diff --git a/Gameton-06/Assets/Gameton/Resources/UI/Prefabs/Buttons/Skill Button.prefab b/Gameton-06/Assets/Gameton/Resources/UI/Prefabs/Buttons/Skill Button.prefab index 26654c7a..e305869c 100644 --- a/Gameton-06/Assets/Gameton/Resources/UI/Prefabs/Buttons/Skill Button.prefab +++ b/Gameton-06/Assets/Gameton/Resources/UI/Prefabs/Buttons/Skill Button.prefab @@ -75,6 +75,230 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &2854517690881290541 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7414306118028536707} + - component: {fileID: 8686763529424033282} + - component: {fileID: 1353060829719948495} + m_Layer: 5 + m_Name: CoolDownText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7414306118028536707 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2854517690881290541} + 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: 3622686016877026920} + 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: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8686763529424033282 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2854517690881290541} + m_CullTransparentMesh: 1 +--- !u!114 &1353060829719948495 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2854517690881290541} + 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: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, 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: 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 &3894634204494625566 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2755631584266671362} + - component: {fileID: 2476940963591009651} + - component: {fileID: 561526979871276618} + - component: {fileID: 1465851161534859390} + m_Layer: 0 + m_Name: CoolDown + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2755631584266671362 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3894634204494625566} + 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: 3622686016877026920} + 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 &2476940963591009651 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3894634204494625566} + m_CullTransparentMesh: 1 +--- !u!114 &561526979871276618 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3894634204494625566} + 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: 0.4669811, b: 0.4669811, 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: 7155d9d3c459a1945a29adc40045dc25, type: 3} + m_Type: 3 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 0 + m_FillClockwise: 1 + m_FillOrigin: 2 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &1465851161534859390 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3894634204494625566} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: adb30198aa32dd140b5750692dd48104, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 75 + image: {fileID: 561526979871276618} --- !u!1 &4450630482936255251 GameObject: m_ObjectHideFlags: 0 @@ -260,6 +484,8 @@ RectTransform: - {fileID: 5866369094657957442} - {fileID: 6576729596631844278} - {fileID: 7951431367337841795} + - {fileID: 2755631584266671362} + - {fileID: 7414306118028536707} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -351,7 +577,9 @@ MonoBehaviour: coolDown: 0 slotNumber: 0 requiredLevel: 0 - skillImage: {fileID: 4450630482936255251} + coolTimeText: {fileID: 1353060829719948495} + coolTimeDimd: {fileID: 561526979871276618} + skillIcon: {fileID: 4450630482936255251} lockImage: {fileID: 9104780789004064627} skillSprite: keys: diff --git a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillBase.cs b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillBase.cs new file mode 100644 index 00000000..a6b0d973 --- /dev/null +++ b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillBase.cs @@ -0,0 +1,31 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace TON +{ + [System.Serializable] + public abstract class SkillBase + { + public float SkillCoolDown => SkillData.coolDown; + public float CurrentCoolDown { get; protected set; } + + public SkillData SkillData { get; private set; } + + + public void Init(SkillData skillData) + { + SkillData = skillData; + } + + public void UpdateSkill(float deltaTime) + { + CurrentCoolDown -= deltaTime; + CurrentCoolDown = Mathf.Max(0, CurrentCoolDown); + } + + + public abstract void ExecuteSkill(CharacterBase actor); + } +} + diff --git a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillBase.cs.meta b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillBase.cs.meta new file mode 100644 index 00000000..cd370f1a --- /dev/null +++ b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9407c2d7c54dec74eac0fe37da48ef1d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillDataManager.cs b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillDataManager.cs index 7d9290dd..1a72ad7b 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillDataManager.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillDataManager.cs @@ -7,6 +7,7 @@ namespace TON public class SkillDataManager : SingletonBase { public List skillDatas { get; private set; } + public List skillBases { get; private set; } protected override void Awake() { @@ -21,6 +22,10 @@ namespace TON { skillDatas = new List(); } + + // skillData를 skillBase로 치환 + // 기존 스킬 클래스들을 skillBase를 상속받게 변경 + } public SkillData GetSkillData(string skillId) diff --git a/Gameton-06/Assets/Gameton/Scripts/UI/ControllerUI.cs b/Gameton-06/Assets/Gameton/Scripts/UI/ControllerUI.cs index 34880d9f..c028b9dd 100644 --- a/Gameton-06/Assets/Gameton/Scripts/UI/ControllerUI.cs +++ b/Gameton-06/Assets/Gameton/Scripts/UI/ControllerUI.cs @@ -74,5 +74,17 @@ namespace TON linkedCharactor.SkillAttack(skill.skillData.name); } + + private void Update() + { + foreach (var index in skillButtons.Keys) + { + ControllerUI_SkillButton skillButton = skillButtons.GetValueOrDefault(index); + if (skillButton != null && skillButton.skillData != null) + { + // skillButton.SetCoolTime() + } + } + } } } diff --git a/Gameton-06/Assets/Gameton/Scripts/UI/ControllerUI_SkillButton.cs b/Gameton-06/Assets/Gameton/Scripts/UI/ControllerUI_SkillButton.cs index 7ed46ee4..7618488d 100644 --- a/Gameton-06/Assets/Gameton/Scripts/UI/ControllerUI_SkillButton.cs +++ b/Gameton-06/Assets/Gameton/Scripts/UI/ControllerUI_SkillButton.cs @@ -1,5 +1,6 @@ using System.Collections; using System.Collections.Generic; +using TMPro; using UnityEngine; using UnityEngine.UI; @@ -9,8 +10,10 @@ namespace TON { public SkillData skillData; - public GameObject skillImage; - public GameObject lockImage; + [SerializeField] private TextMeshProUGUI coolTimeText; + [SerializeField] private Image coolTimeDimd; + [SerializeField] private GameObject skillIcon; + [SerializeField] private GameObject lockImage; [SerializeField] private SerializableDictionary skillSprite = new SerializableDictionary(); @@ -19,12 +22,18 @@ namespace TON { Debug.Log($"Initalize :: {skillData.id}"); this.skillData = skillData; - skillImage.SetActive(true); - skillImage.GetComponent().sprite = skillSprite.GetValueOrDefault(skillData.id, null); + skillIcon.SetActive(true); + skillIcon.GetComponent().sprite = skillSprite.GetValueOrDefault(skillData.id, null); lockImage.SetActive(false); } + public void SetCoolTime(float remain, float max) + { + coolTimeText.gameObject.SetActive(remain > 0f); + coolTimeText.text = $"{Mathf.CeilToInt(remain)}s"; + coolTimeDimd.fillAmount = remain / max; + } }