1. BigInteger를 활용한 데미지 시스템

 

1.1 BigInteger 확장 메서드

 

큰 숫자를한국어 단위로 표시하기 위한 확장 메서드구현

(모바일환경이라 메모리와 성능의 트레이드 오프를 고려한 구현)

public static class BigIntegerExtensions
{
    private static readonly (BigInteger value, string unit)[] units =
    {
        (1000000000000, "조"),
        (100000000, "억"),
        (10000, "만"),
        (1000, "천")
    };

    public static string ToKoreanString(this BigInteger number)
    {
        if (number < 1000) return number.ToString();
        
        foreach (var unit in units)
        {
            if (number >= unit.value)
            {
                var main = number / unit.value;
                var remainder = number % unit.value;
                
                if (remainder > 0 && remainder >= unit.value / 10)
                {
                    return $"{main}{unit.value}{remainder.ToKoreanString()}";
                }
                return $"{main}{unit.value}";
            }
        }
        return number.ToString();
    }
}

 

1.2 데미지 계산 시스템

 

중앙 집중식 데미지 계산 시스템 구현

 

public static class DamageSystem
{
    private static BigInteger CalculateFinalDamage(DamageInfo damageInfo)
    {
        if (damageInfo.Attacker.TryGetComponent(out StatSystem attackerStats))
        {
            // 크리티컬 확률 계산
            damageInfo.IsCritical = CheckCriticalHit(attackerStats);
            
            // 크리티컬 데미지 계산
            decimal critMultiplier = damageInfo.IsCritical ? 
                1.5m + (decimal)attackerStats.GetStatValue(StatType.CriticalDamage)/100m : 1m;

            // 최종 데미지 계산
            BigInteger attackPower = attackerStats.GetStatValue(StatType.Attack);
            decimal finalDmgMultiplier = 1 + (decimal)attackerStats.GetStatValue(StatType.FinalDamage)/100m;
            
            BigInteger baseDamage = damageInfo.BaseDamage + attackPower;
            decimal calculatedDamage = (decimal)baseDamage * critMultiplier * finalDmgMultiplier;
            
            return (BigInteger)calculatedDamage;
        }
        return damageInfo.BaseDamage;
    }
}

 

2. 방치형 전투 시스템 구현

 

2.1 전투 로직 흐름

 

 

2.2 전투 시스템 구현

 

private void UpdateCombat()
{
    if (currentTarget == null) return;

    // 1. 스킬 사용 시도
    if (player.SkillSystem.TryUseSkills())
    {
        return;
    }

    // 2. 일반 공격 처리
    HandleBasicAttack();
}

private void HandleBasicAttack()
{
    float distance = Vector3.Distance(transform.position, currentTarget.transform.position);
    
    if (distance <= attackRange)
    {
        Attack();
    }
    else
    {
        StartMovement();
    }
}

 

2.3 스킬 시스템

 

범위 기반 스킬 시스템 구현

 

public class SkillData : SerializedScriptableObject
{
    public virtual void Execute(GameObject caster)
    {
        ExecuteAreaSkill(caster);
    }

    private void ExecuteAreaSkill(GameObject caster)
    {
        var colliders = new Collider[20];
        int hitCount = Physics.OverlapSphereNonAlloc(
            caster.transform.position,
            range,
            colliders,
            LayerMask.GetMask("Monster")
        );

        for (int i = 0; i < hitCount; i++)
        {
            if (colliders[i].TryGetComponent(out Monster monster))
            {
                monster.TakeDamage(damage);
            }
        }
    }
}

 

3. 주요 시스템 특징

 

3.1 자동 전투 시스템

 

  • 자동 타겟팅 시스템
  • 거리 기반 행동 결정
  • 스킬 자동 사용 로직

 

3.2 데미지 계산 특징

 

  • BigInteger를 통한 큰 수 처리
  • 크리티컬 확률/데미지 계산
  • 최종 데미지 증가 적용 

 

3.3 스킬시스템 특징

 

  • 범위 기반 데미지
  • 쿨다운 시스템
  • 자동/수동 모드 전환

 

4. 개선 사항 및 향후 계획

 

1. 스킬 추가 및 이펙트 적용

2. 데미지 표시 UI 구현

3. 몬스터 AI 구현

4. 보스 전투 및 관련 로직 구현 

 

 

 


+

 

스탯시스템 및 스탯 강화 구현