From 57eb4abea3d2572089999ffbf88260821ecbce33 Mon Sep 17 00:00:00 2001 From: "aube.lee" Date: Sat, 8 Feb 2025 14:49:06 +0900 Subject: [PATCH] =?UTF-8?q?skill=20cooltime=20=EC=A0=81=EC=9A=A9=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dev_jinjoo/Edit_Ingame.unity | 24 ++++++++++ .../Scripts/Character/CharacterBase.cs | 4 +- .../Scripts/Character/Skill/DarknessBall.cs | 48 +------------------ .../Scripts/Character/Skill/FireBall.cs | 48 +------------------ .../Scripts/Character/Skill/IceBall.cs | 47 +----------------- .../Scripts/Character/Skill/SkillBase.cs | 46 +++++++++++++++++- .../Character/Skill/SkillDataManager.cs | 3 -- .../Assets/Gameton/Scripts/UI/ControllerUI.cs | 17 ++----- .../Scripts/UI/ControllerUI_SkillButton.cs | 46 ++++++++++++++++-- 9 files changed, 118 insertions(+), 165 deletions(-) diff --git a/Gameton-06/Assets/Gameton/Scenes/Personal Scenes/dev_jinjoo/Edit_Ingame.unity b/Gameton-06/Assets/Gameton/Scenes/Personal Scenes/dev_jinjoo/Edit_Ingame.unity index b971f4ca..8b91bba3 100644 --- a/Gameton-06/Assets/Gameton/Scenes/Personal Scenes/dev_jinjoo/Edit_Ingame.unity +++ b/Gameton-06/Assets/Gameton/Scenes/Personal Scenes/dev_jinjoo/Edit_Ingame.unity @@ -749,6 +749,30 @@ PrefabInstance: propertyPath: poolContainer.Array.data[2].count value: 5 objectReference: {fileID: 0} + - target: {fileID: 7514646104575922049, guid: ab2e507b20e5dc844a1ea24b5619f656, type: 3} + propertyPath: poolContainer.Array.data[0].objectId + value: K0001 + objectReference: {fileID: 0} + - target: {fileID: 7514646104575922049, guid: ab2e507b20e5dc844a1ea24b5619f656, type: 3} + propertyPath: poolContainer.Array.data[1].objectId + value: K0002 + objectReference: {fileID: 0} + - target: {fileID: 7514646104575922049, guid: ab2e507b20e5dc844a1ea24b5619f656, type: 3} + propertyPath: poolContainer.Array.data[2].objectId + value: K0007 + objectReference: {fileID: 0} + - target: {fileID: 7514646104575922049, guid: ab2e507b20e5dc844a1ea24b5619f656, type: 3} + propertyPath: poolContainer.Array.data[0].objectPrefab + value: + objectReference: {fileID: 6328494989662859589, guid: 25bb8f03ea9cfc941b64e04b75d3a1d9, type: 3} + - target: {fileID: 7514646104575922049, guid: ab2e507b20e5dc844a1ea24b5619f656, type: 3} + propertyPath: poolContainer.Array.data[1].objectPrefab + value: + objectReference: {fileID: 2209934716239183953, guid: d120f035432a9f849acccd97c5d88eb1, type: 3} + - target: {fileID: 7514646104575922049, guid: ab2e507b20e5dc844a1ea24b5619f656, type: 3} + propertyPath: poolContainer.Array.data[2].objectPrefab + value: + objectReference: {fileID: 589444956133359262, guid: 530f7e18dc59af345a84638c4e80642f, type: 3} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] diff --git a/Gameton-06/Assets/Gameton/Scripts/Character/CharacterBase.cs b/Gameton-06/Assets/Gameton/Scripts/Character/CharacterBase.cs index e62ffafb..17c8d007 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Character/CharacterBase.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Character/CharacterBase.cs @@ -160,12 +160,12 @@ namespace TON attackCollider.EnableCollider(false); } - public void SkillAttack(string skillName) + public void SkillAttack(string skillId) { animator.Play("Skill Attack"); // 스킬 생성 - GameObject skill = ObjectPoolManager.Instance.GetEffect(skillName); + GameObject skill = ObjectPoolManager.Instance.GetEffect(skillId); // skill.transform.SetParent(firePoint); skill.transform.SetPositionAndRotation(firePoint.position, firePoint.rotation); diff --git a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/DarknessBall.cs b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/DarknessBall.cs index 468aa4e3..114bd254 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/DarknessBall.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/DarknessBall.cs @@ -4,54 +4,8 @@ using UnityEngine; namespace TON { - public class DarknessBall : PoolAble + public class DarknessBall : SkillBase { - private float elapsedTime; // 경과 시간 저장 변수 - public float destoryTime = 2f; - [SerializeField] - private float damage; - private string id = "K0003"; - - private DamageCalculator damageCalculator = new DamageCalculator(); - private PlayerData playerData; - - - void OnEnable() - { - elapsedTime = 0f; // 오브젝트가 활성화될 때 초기화 - damage = SkillDataManager.Singleton.GetSkillData(id).damage; - playerData = PlayerDataManager.Singleton.player; - } - - void Update() - { - elapsedTime += Time.deltaTime; // 경과 시간 누적 - - // 2초가 지나면 오브젝트 풀에 반환 - if (elapsedTime >= destoryTime) - { - ReleaseObject(); - } - } - - private void OnTriggerEnter2D(Collider2D collision) - { - if (collision.CompareTag("Monster")) // 적과 충돌 시 제거 - { - // 기본 데미지 계산 - // TODO: 장비 공격력 반영 필요 - // float damage = damageCalculator.CalculateBaseDamage(playerData.attackPower, playerData.equipmentAttack, playerData.defensivePower); - - // 몬스터 방어력 - float monsterDefencePower = collision.GetComponent().defencePower; - float damage = damageCalculator.CalculateBaseDamage(playerData.attackPower * this.damage, 0, monsterDefencePower); - - // 치명타 적용 - damage = damageCalculator.ApplyCriticalDamage(damage); - collision.GetComponent().ApplyDamage(damage); - ReleaseObject(); - } - } } } diff --git a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/FireBall.cs b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/FireBall.cs index 06b5a4ea..39626ccb 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/FireBall.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/FireBall.cs @@ -5,54 +5,8 @@ using UnityEngine; namespace TON { - public class FireBall : PoolAble + public class FireBall : SkillBase { - private float elapsedTime; // 경과 시간 저장 변수 - public float destoryTime = 2f; - [SerializeField] - private float damage; - private string id = "K0001"; - - - private DamageCalculator damageCalculator = new DamageCalculator(); - private PlayerData playerData; - - void OnEnable() - { - elapsedTime = 0f; // 오브젝트가 활성화될 때 초기화 - damage = SkillDataManager.Singleton.GetSkillData(id).damage; - playerData = PlayerDataManager.Singleton.player; - } - - void Update() - { - elapsedTime += Time.deltaTime; // 경과 시간 누적 - - // 2초가 지나면 오브젝트 풀에 반환 - if (elapsedTime >= destoryTime) - { - ReleaseObject(); - } - } - - private void OnTriggerEnter2D(Collider2D collision) - { - if (collision.CompareTag("Monster")) // 적과 충돌 시 제거 - { - // 기본 데미지 계산 - // TODO: 장비 공격력 반영 필요 - // float damage = damageCalculator.CalculateBaseDamage(playerData.attackPower, playerData.equipmentAttack, playerData.defensivePower); - - // 몬스터 방어력 - float monsterDefencePower = collision.GetComponent().defencePower; - float damage = damageCalculator.CalculateBaseDamage(playerData.attackPower * this.damage, 0, monsterDefencePower); - - // 치명타 적용 - damage = damageCalculator.ApplyCriticalDamage(damage); - collision.GetComponent().ApplyDamage(damage); - ReleaseObject(); - } - } } } diff --git a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/IceBall.cs b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/IceBall.cs index 90712a59..568e173c 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/IceBall.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/IceBall.cs @@ -4,53 +4,8 @@ using UnityEngine; namespace TON { - public class IceBall : PoolAble + public class IceBall : SkillBase { - private float elapsedTime; // 경과 시간 저장 변수 - public float destoryTime = 2f; - [SerializeField] - private float damage; - private string id = "K0002"; - - private DamageCalculator damageCalculator = new DamageCalculator(); - private PlayerData playerData; - - void OnEnable() - { - elapsedTime = 0f; // 오브젝트가 활성화될 때 초기화 - damage = SkillDataManager.Singleton.GetSkillData(id).damage; - playerData = PlayerDataManager.Singleton.player; - } - - void Update() - { - elapsedTime += Time.deltaTime; // 경과 시간 누적 - - // 2초가 지나면 오브젝트 풀에 반환 - if (elapsedTime >= destoryTime) - { - ReleaseObject(); - } - } - - private void OnTriggerEnter2D(Collider2D collision) - { - if (collision.CompareTag("Monster")) // 적과 충돌 시 제거 - { - // 기본 데미지 계산 - // TODO: 장비 공격력 반영 필요 - // float damage = damageCalculator.CalculateBaseDamage(playerData.attackPower, playerData.equipmentAttack, playerData.defensivePower); - - // 몬스터 방어력 - float monsterDefencePower = collision.GetComponent().defencePower; - float damage = damageCalculator.CalculateBaseDamage(playerData.attackPower * this.damage, 0, monsterDefencePower); - - // 치명타 적용 - damage = damageCalculator.ApplyCriticalDamage(damage); - collision.GetComponent().ApplyDamage(damage); - ReleaseObject(); - } - } } } diff --git a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillBase.cs b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillBase.cs index a6b0d973..250f8b45 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillBase.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillBase.cs @@ -5,17 +5,41 @@ using UnityEngine; namespace TON { [System.Serializable] - public abstract class SkillBase + public abstract class SkillBase : PoolAble { public float SkillCoolDown => SkillData.coolDown; public float CurrentCoolDown { get; protected set; } public SkillData SkillData { get; private set; } + public PlayerData playerData; + + private DamageCalculator damageCalculator = new DamageCalculator(); + + private float elapsedTime; // 경과 시간 저장 변수 + public float destoryTime = 2f; public void Init(SkillData skillData) { SkillData = skillData; + playerData = PlayerDataManager.Singleton.player; + } + + void OnEnable() + { + elapsedTime = 0f; // 오브젝트가 활성화될 때 초기화 + } + + void Update() + { + UpdateSkill(Time.deltaTime); + elapsedTime += Time.deltaTime; // 경과 시간 누적 + + // 2초가 지나면 오브젝트 풀에 반환 + if (elapsedTime >= destoryTime) + { + ReleaseObject(); + } } public void UpdateSkill(float deltaTime) @@ -25,7 +49,25 @@ namespace TON } - public abstract void ExecuteSkill(CharacterBase actor); + private void OnTriggerEnter2D(Collider2D collision) + { + if (collision.CompareTag("Monster")) // 적과 충돌 시 제거 + { + // 기본 데미지 계산 + // TODO: 장비 공격력 반영 필요 + // float damage = damageCalculator.CalculateBaseDamage(playerData.attackPower, playerData.equipmentAttack, playerData.defensivePower); + + // 몬스터 방어력 + float monsterDefencePower = collision.GetComponent().defencePower; + float damage = damageCalculator.CalculateBaseDamage(playerData.attackPower * SkillData.damage, 0, monsterDefencePower); + + // 치명타 적용 + damage = damageCalculator.ApplyCriticalDamage(damage); + collision.GetComponent().ApplyDamage(damage); + ReleaseObject(); + } + } + } } diff --git a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillDataManager.cs b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillDataManager.cs index 1a72ad7b..1f5816b0 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillDataManager.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/SkillDataManager.cs @@ -22,10 +22,7 @@ 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 c028b9dd..11514754 100644 --- a/Gameton-06/Assets/Gameton/Scripts/UI/ControllerUI.cs +++ b/Gameton-06/Assets/Gameton/Scripts/UI/ControllerUI.cs @@ -69,22 +69,13 @@ namespace TON linkedCharactor.Attack(); } - public void OnClickSkillButton(ControllerUI_SkillButton skill) + public void OnClickSkillButton(ControllerUI_SkillButton button) { + linkedCharactor.SkillAttack(button.skillId); + SkillData skillData = skillDatas.Find(skill => skill.id == button.skillId); + button.SetCoolTime(skillData.coolDown); - 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 7618488d..bc7d2afa 100644 --- a/Gameton-06/Assets/Gameton/Scripts/UI/ControllerUI_SkillButton.cs +++ b/Gameton-06/Assets/Gameton/Scripts/UI/ControllerUI_SkillButton.cs @@ -9,7 +9,6 @@ namespace TON public class ControllerUI_SkillButton : MonoBehaviour { - public SkillData skillData; [SerializeField] private TextMeshProUGUI coolTimeText; [SerializeField] private Image coolTimeDimd; [SerializeField] private GameObject skillIcon; @@ -18,22 +17,59 @@ namespace TON [SerializeField] private SerializableDictionary skillSprite = new SerializableDictionary(); + public string skillId; + + public float maxCooldown; + + + public void Initalize(SkillData skillData) { - Debug.Log($"Initalize :: {skillData.id}"); - this.skillData = skillData; + skillId = skillData.id; + maxCooldown = skillData.coolDown; + InitSkillData(skillData); skillIcon.SetActive(true); skillIcon.GetComponent().sprite = skillSprite.GetValueOrDefault(skillData.id, null); lockImage.SetActive(false); } - public void SetCoolTime(float remain, float max) + public void SetCoolTime(float remain) { coolTimeText.gameObject.SetActive(remain > 0f); coolTimeText.text = $"{Mathf.CeilToInt(remain)}s"; - coolTimeDimd.fillAmount = remain / max; + coolTimeDimd.fillAmount = remain / maxCooldown; + } + private SkillBase InitSkillData(SkillData skillData) + { + switch (skillData.id) + { + case "K0001": + var fireBall = gameObject.AddComponent(); + fireBall.Init(skillData); + return fireBall; + case "K0002": + var iceBall = gameObject.AddComponent(); + iceBall.Init(skillData); + return iceBall; + case "K0003": + return null; + case "K0004": + return null; + case "K0005": + return null; + case "K0006": + return null; + case "K0007": + return null; + case "K0008": + return null; + default: + return null; + } + } + }