김선영
한세대학교 22학번 컴퓨터공학과
한세대학교 22학번 컴퓨터공학과
게임 개발 생산성을 높이기 위한 공용 유틸리티 클래스(Util Class)의 구현 내용과, 몬스터 및 NPC의 지능적인 이동을 구현하기 위한 Unity AI 내비게이션 시스템(UnityEngine.AI)의 기술적 특징을 분석했습니다.
#if UNITY_EDITOR 전처리기를 사용하여 빌드 시 불필요한 문자열 연산과 메모리 할당을 방지함.Log, LogRed, LogGreen, LogBlue (색상별 로그 지원).Vector3.Distance를 사용하여 유클리드 거리를 계산하고, 허용 오차(Offset) 내에 진입했는지 검사함.Vector3.Distance로 사정거리 내에 있는지 1차 확인.Vector3.Angle을 사용하여 적의 전방 벡터(forward)와 플레이어 방향 벡터 사이의 각도를 계산.true 반환.코드 상단에 선언된 using UnityEngine.AI;는 유니티의 내장 길 찾기 시스템을 활용하기 위함이다.
SetDestination() 메서드를 통해 목적지까지 최단 경로를 계산하고 장애물을 회피하며 이동함.using UnityEngine;
using UnityEngine.AI; // AI 네임스페이스 선언
/// <summary>
/// 게임 전반에 사용되는 공용 유틸리티 클래스
/// </summary>
public class Util
{
#region [Logging System]
// 에디터 환경에서만 동작하는 디버그 로그 래퍼
public static void Log(object message)
{
#if UNITY_EDITOR
Debug.Log($"{message}");
#endif
}
public static void LogRed(object message)
{
#if UNITY_EDITOR
Debug.Log($"<color=red>{message}</color>");
#endif
}
#endregion
#region [Math & Physics Helper]
/// <summary>
/// 목적지 도착 여부 확인
/// </summary>
public static bool IsArrived(Transform selfTransform, Vector3 destination, float offset = 0.1f)
{
return Vector3.Distance(selfTransform.position, destination) < offset;
}
/// <summary>
/// 시야각(FOV) 내 타겟 존재 여부 확인
/// </summary>
public static bool IsInSight(Transform selfTransform, Transform target, float sightAngle, float sightRange)
{
// 1. 방향 벡터 계산
Vector3 direction = (target.position - selfTransform.position).normalized;
// 2. 시야각 검사 (Angle)
if (Vector3.Angle(selfTransform.forward, direction) <= sightAngle)
{
// 3. 거리 검사 (Distance)
if (Vector3.Distance(selfTransform.position, target.position) <= sightRange)
{
return true; // 감지 성공
}
}
return false; // 감지 실패
}
#endregion
}
Util 클래스로 모듈화하여 코드 중복을 제거함.Conditional Compilation)을 적용하여 릴리즈 빌드의 성능 저하를 방지함.UnityEngine.AI 네임스페이스를 도입함으로써, 향후 NavMeshAgent를 활용한 정교한 몬스터 추적 및 회피 알고리즘 구현의 기반을 마련함.현재
Util클래스 내부에서는UnityEngine.AI기능을 직접 사용하지 않으나, 향후NavMeshPath경로 계산이나CalculatePath등의 유틸리티 함수 확장을 고려하여 네임스페이스를 유지함.