NukeStrikeSkill에 대한 기능을 개선하며, 스킬 효과에 포함된 폭발 이펙트와 지속 장판 데미지를 구현하였습니다. 또한, 적절한 위치 보정을 적용하여 효과가 정확히 바닥에 닿도록 했습니다.
private void ExplodeAt(Vector2 position)
{
if (_explosionPrefab != null)
{
GameObject explosion = Instantiate(_explosionPrefab, position, Quaternion.identity);
InstantDamageEffect instantEffect = explosion.GetComponent<InstantDamageEffect>();
// 폭발 이펙트의 yOffset 보정
if (explosion.TryGetComponent<SpriteRenderer>(out var sprite))
{
float yOffset = sprite.bounds.size.y / 2f;
explosion.transform.position += Vector3.up * yOffset;
}
var ranged = _weapon as RangedWeapon;
if (ranged != null)
{
float[] baseDamage = new float[] { _skill.BaseDamageByLevel, _skill.BaseDamageByLevel };
var payload = _weapon.StatProvider.CreatePayloadFrom(true);
instantEffect.SetPayload(baseDamage, 1f, payload, true, false, 2f);
}
}
// 지속 장판
if (_damageZonePrefab != null)
{
GameObject zone = Instantiate(_damageZonePrefab, position, Quaternion.identity);
var zoneEffect = zone.GetComponent<DamageZoneEffect>();
if (zoneEffect != null)
{
float[] baseDamage = new float[] { _skill.BaseDamageByLevel, _skill.BaseDamageByLevel };
var payload = _weapon.StatProvider.CreatePayloadFrom(true);
zoneEffect.SetPayload(baseDamage, 1f, payload, true, false, false, 0, _zoneDuration);
}
Destroy(zone, _zoneDuration);
}
}
DamageZoneEffect 컴포넌트를 이용해 즉시 데미지와 지속 데미지를 적용할 수 있게 만들었습니다. 이를 통해 장판 범위 내의 적에게 주기적으로 데미지를 주고, 폭발 시 즉시 데미지를 적용하는 효과가 이루어집니다.SpriteRenderer의 크기를 기반으로 yOffset을 계산하여 위치 보정합니다.yOffset을 계산하여, 폭발과 장판의 위치를 보정합니다.private void ApplyInstantDamage()
{
Collider2D[] hits = Physics2D.OverlapCircleAll(transform.position, _instantDamageRadius, _enemyLayer);
foreach (var hit in hits)
{
if (hit.TryGetComponent<DamageablePart>(out var enemy))
{
bool isCrit = Random.value < _payload.CritChance;
float finalDamage = _payload.GetFinalDamage(_weaponBaseDamage, _weaponMultiplier, _isSkill, _isMelee, isCrit);
enemy.TakePartDanage(transform.position, finalDamage, isCrit);
}
}
}
yOffset을 계산하여, 폭발 이펙트와 장판이 바닥에 정확히 맞춰지도록 했습니다.DamageZoneEffect의 반복적인 데미지 적용 방식과 InstantDamageEffect의 즉시 데미지 기능을 잘 분리하여 관리할 수 있도록 수정하였습니다.