BATTLE_SETUP (물리적 준비) - 맵 생성/로딩 - 지형 오브젝트 배치 - 아군/적군 유닛 스폰 - 카메라 초기 위치 설정 - 전투 진입 연출 (페이드, 줌인) - 배경음악 변경 소요 시간: 1-3초 (로딩 + 연출)
BATTLE_READY (논리적 준비) - 턴 순서(Initiative) 계산 - 속도/스탯 기반 순서 정렬 - UI 요소 활성화 - 턴 순서 표시 바 - 유닛 HP/MP 게이지 - 미니맵 - 버프/디버프 초기화 - 카메라를 첫 번째 행동 유닛에게 이동 - "Battle Start!" 메시지 소요 시간: 0.5-1초 (UI 애니메이션)
이 분리는 코드 품질과 유지보수성을 크게 향상시킵니다. Fire Emblem, XCOM, Final Fantasy Tactics 같은 상업 게임들도 유사한 구조를 사용합니다. 👍.
.
로딩 전투 준비 중 공격 애니메이션 실행 중 아군 턴이지만 행동불능 상태이상 걸렸을 때 적의 턴 특수 대화 전투 결과
NullReferenceException: 오브젝트를 참조하지 않는 변수에 접근하려고 할 때 발생합니다 가장 흔함 값이 없다는 거임
DivideByZeroException: 0으로 나누는 연산을 시도할 때 발생합니다.
IndexOutOfRangeException: 배열이나 컬렉션의 유효하지 않은 인덱스에 접근하려고 할 때 발생합니다.
C#에서는 try, catch, finally 키워드를 사용하여 예외를 처리합니다.
예외 처리를 해야 하는 이유
안정성: 예외 발생 시 프로그램이 강제 종료되는 것을 막고, 사용자에게 친절한 오류 메시지를 보여주거나 다른 방법으로 실행을 계속할 수 있도록 합니다.
디버깅: 예외가 발생한 지점과 상황을 정확히 파악하여 문제를 해결하는 데 도움을 줍니다.
public GameObject targetObject;
void Start()
{
// 예외 처리 대신 if문으로 Null 체크
if (targetObject != null)
{
Debug.Log(targetObject.name);
}
else
{
Debug.LogError("Target Object가 할당되지 않았습니다.");
}
}
// NullReferenceException 방지 예시
+
abc = 5/0 ; 이런식으로 0 으로 나누면 컴퓨터에서 오류 뜸 이러면 게임이 튕김
try
{
abc = 5/0 ;
}
catch(Exception)
이렇게 하면 예외 처리가 된 거임
Exception을 캐치 안에 넣으면 모든 오류를 무시하겠다는 말임
try
{
// 예외 발생 가능성이 있는 코드
int result = 10 / 0;
}
catch (DivideByZeroException ie)
{
// 특정 예외 처리
Debug.LogError("0으로 나눌 수 없습니다: " + ie.Message);
}
finally
{
// 오류가 뜨던 말건 실행할 함수
print(abc);
}