From 5818ca2670ce3fade56d4bcb03aaa7f14c21f6d6 Mon Sep 17 00:00:00 2001 From: "aube.lee" Date: Fri, 7 Feb 2025 17:27:42 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8A=A4=ED=82=AC=20=EB=8D=B0=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=EA=B3=84=EC=82=B0=20=EB=A1=9C=EC=A7=81=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scripts/Character/CollisionDetector .cs | 4 ++-- .../Scripts/Character/Skill/DarknessBall.cs | 24 +++++++++++++++---- .../Scripts/Character/Skill/FireBall.cs | 24 +++++++++++++++---- .../Scripts/Character/Skill/IceBall.cs | 23 ++++++++++++++---- .../Scripts/Common/DamageCalculator.cs | 4 ++-- 5 files changed, 60 insertions(+), 19 deletions(-) diff --git a/Gameton-06/Assets/Gameton/Scripts/Character/CollisionDetector .cs b/Gameton-06/Assets/Gameton/Scripts/Character/CollisionDetector .cs index 7752ad15..d1813866 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Character/CollisionDetector .cs +++ b/Gameton-06/Assets/Gameton/Scripts/Character/CollisionDetector .cs @@ -34,9 +34,9 @@ namespace TON float damage = damageCalculator.CalculateBaseDamage(playerData.attackPower, 0, monsterDefencePower); // 치명타 적용 (캐릭터는 적용) - damage = damageCalculator.ApplyCriticalDamage(damage, true); + damage = damageCalculator.ApplyCriticalDamage(damage); - collision.GetComponent().ApplyDamage(10f); + collision.GetComponent().ApplyDamage(damage); } } diff --git a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/DarknessBall.cs b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/DarknessBall.cs index 25a40a21..468aa4e3 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/DarknessBall.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/DarknessBall.cs @@ -9,15 +9,19 @@ namespace TON private float elapsedTime; // 경과 시간 저장 변수 public float destoryTime = 2f; - public float attackPower; - public float damage; - public string id = "K0003"; + [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; - attackPower = PlayerDataManager.Singleton.player.attackPower; + playerData = PlayerDataManager.Singleton.player; } void Update() @@ -35,7 +39,17 @@ namespace TON { if (collision.CompareTag("Monster")) // 적과 충돌 시 제거 { - collision.GetComponent().ApplyDamage(damage * attackPower); + // 기본 데미지 계산 + // 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 ee88e251..06b5a4ea 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/FireBall.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/FireBall.cs @@ -10,15 +10,19 @@ namespace TON private float elapsedTime; // 경과 시간 저장 변수 public float destoryTime = 2f; - public float attackPower; - public float damage; - public string id = "K0001"; + [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; - attackPower = PlayerDataManager.Singleton.player.attackPower; + playerData = PlayerDataManager.Singleton.player; } void Update() @@ -36,7 +40,17 @@ namespace TON { if (collision.CompareTag("Monster")) // 적과 충돌 시 제거 { - collision.GetComponent().ApplyDamage(damage * attackPower); + // 기본 데미지 계산 + // 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 22ed5c78..90712a59 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Character/Skill/IceBall.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Character/Skill/IceBall.cs @@ -9,15 +9,18 @@ namespace TON private float elapsedTime; // 경과 시간 저장 변수 public float destoryTime = 2f; - public float attackPower; - public float damage; - public string id = "K0002"; + [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; - attackPower = PlayerDataManager.Singleton.player.attackPower; + playerData = PlayerDataManager.Singleton.player; } void Update() @@ -35,7 +38,17 @@ namespace TON { if (collision.CompareTag("Monster")) // 적과 충돌 시 제거 { - collision.GetComponent().ApplyDamage(damage * attackPower); + // 기본 데미지 계산 + // 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/Common/DamageCalculator.cs b/Gameton-06/Assets/Gameton/Scripts/Common/DamageCalculator.cs index 9666e737..1bc84eb7 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Common/DamageCalculator.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Common/DamageCalculator.cs @@ -32,9 +32,9 @@ namespace TON /// /// 치명타 적용 (치명타 확률이 0보다 클 경우에만 적용) /// - public float ApplyCriticalDamage(float damage, bool canCritical) + public float ApplyCriticalDamage(float damage) { - if (canCritical && Random.value < criticalChance) // Random.value는 0.0 ~ 1.0 사이의 랜덤 값 + if (Random.value < criticalChance) // Random.value는 0.0 ~ 1.0 사이의 랜덤 값 { damage *= criticalMultiplier; Debug.Log("💥 치명타 발생! 💥");