스킬 버튼 동작 구현 테스트

This commit is contained in:
aube.lee
2025-02-08 12:35:14 +09:00
parent 2c7f326873
commit 7e63cd2621
6 changed files with 301 additions and 5 deletions

View File

@@ -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:

View File

@@ -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);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9407c2d7c54dec74eac0fe37da48ef1d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -7,6 +7,7 @@ namespace TON
public class SkillDataManager : SingletonBase<SkillDataManager>
{
public List<SkillData> skillDatas { get; private set; }
public List<SkillBase> skillBases { get; private set; }
protected override void Awake()
{
@@ -21,6 +22,10 @@ namespace TON
{
skillDatas = new List<SkillData>();
}
// skillData를 skillBase로 치환
// 기존 스킬 클래스들을 skillBase를 상속받게 변경
}
public SkillData GetSkillData(string skillId)

View File

@@ -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()
}
}
}
}
}

View File

@@ -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<string, Sprite> skillSprite = new SerializableDictionary<string, Sprite>();
@@ -19,12 +22,18 @@ namespace TON
{
Debug.Log($"Initalize :: {skillData.id}");
this.skillData = skillData;
skillImage.SetActive(true);
skillImage.GetComponent<Image>().sprite = skillSprite.GetValueOrDefault(skillData.id, null);
skillIcon.SetActive(true);
skillIcon.GetComponent<Image>().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;
}
}