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. 보스 전투 및 관련 로직 구현
+
스탯시스템 및 스탯 강화 구현