2026-04-06 스킬시스템

This commit is contained in:
2026-04-06 18:05:11 +09:00
parent c0713abdaa
commit 42f92020c7
65 changed files with 457 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
using UnityEngine;
public class AreaEffect : MonoBehaviour, ISkillEffect
{
public void Execute(SkillInstance skill, Transform caster, float chargeRatio)
{
SkillLevelData levelData = skill.CurrentLevelData;
float finalDamage = levelData.Damage * chargeRatio;
Vector3 center = caster.position + caster.forward * levelData.Range;
if (skill.Data.EffectPrefab != null)
{
Instantiate(skill.Data.EffectPrefab, center, Quaternion.identity);
}
Collider[] hits = Physics.OverlapSphere(center, levelData.Range);
foreach (Collider hit in hits)
{
if (hit.transform == caster) continue;
Debug.Log($"[범위] {hit.name}에게 {finalDamage} 데미지");
}
}
}

View File

@@ -0,0 +1,14 @@
using UnityEngine;
public class BuffEffect : MonoBehaviour, ISkillEffect
{
public void Execute(SkillInstance skill, Transform caster, float chargeRatio)
{
SkillLevelData levelData = skill.CurrentLevelData;
// PlayerStat에 버프 적용
// caster.GetComponent<PlayerStat>()?.ApplyBuff(levelData);
Debug.Log($"버프 적용: {skill.Data.SkillName}, 지속시간 {levelData.Duration}초");
}
}

View File

@@ -0,0 +1,20 @@
using UnityEngine;
public class DamageEffect : MonoBehaviour, ISkillEffect
{
public void Execute(SkillInstance skill, Transform caster, float chargeRatio)
{
SkillLevelData levelData = skill.CurrentLevelData;
float finalDamage = levelData.Damage * chargeRatio;
float range = levelData.Range;
Collider[] hits = Physics.OverlapSphere(caster.position + caster.forward * range * 0.5f, range);
foreach (Collider hit in hits)
{
if (hit.transform == caster) continue;
// IDamageable 등 인터페이스가 있으면 여기서 적용
Debug.Log($"{hit.name}에게 {finalDamage} 데미지");
}
}
}

View File

@@ -0,0 +1,6 @@
using UnityEngine;
public interface ISkillEffect
{
void Execute(SkillInstance skill, Transform caster, float chargeRatio);
}

View File

@@ -0,0 +1,15 @@
using UnityEngine;
public class ProjectileEffect : MonoBehaviour, ISkillEffect
{
public void Execute(SkillInstance skill, Transform caster, float chargeRatio)
{
if (skill.Data.EffectPrefab == null) return;
Vector3 spawnPos = caster.position + caster.forward + Vector3.up;
GameObject proj = Instantiate(skill.Data.EffectPrefab, spawnPos, caster.rotation);
// 투사체에 데미지 정보 전달
// proj.GetComponent<Projectile>()?.Init(skill.CurrentLevelData.Damage * chargeRatio);
}
}