Projext/Assets/Scripts/Systems/Optimization/RenderOptimizationConfig.cs

101 lines
6.6 KiB
C#
Raw Permalink Normal View History

2026-02-12 15:23:25 +00:00
using UnityEngine; // 유니티 엔진의 기본 기능을 불러올거에요 -> UnityEngine을
2026-02-02 08:30:23 +00:00
2026-02-12 15:23:25 +00:00
namespace GameSystems.Optimization // 최적화 네임스페이스를 정의할거에요 -> GameSystems.Optimization으로
2026-02-02 08:30:23 +00:00
{
/// <summary>
/// PlayerRangeManager의 설정을 관리하는 ScriptableObject
/// </summary>
2026-02-12 15:23:25 +00:00
[CreateAssetMenu(fileName = "RenderOptimizationConfig", menuName = "Game Systems/Render Optimization Config")] // 에셋 생성 메뉴를 만들거에요 -> 지정된 경로에
public sealed class RenderOptimizationConfig : ScriptableObject // 클래스를 선언할거에요 -> ScriptableObject를 상속받는 RenderOptimizationConfig를
2026-02-02 08:30:23 +00:00
{
#region Inspector Fields
2026-02-12 15:23:25 +00:00
[Header("=== 렌더링 범위 설정 ===")] // 인스펙터에 제목을 표시할거에요 -> === 렌더링 범위 설정 === 을
[Tooltip("플레이어 주변 렌더링 반지름 (유니티 단위)")] // 툴팁을 추가할거에요 -> 설명 문구를
[SerializeField, Range(10f, 200f)] // 슬라이더 범위를 지정할거에요 -> 10에서 200 사이로
private float _renderRange = 40f; // 변수를 선언할거에요 -> 기본 렌더링 범위인 40을 _renderRange에
2026-02-02 08:30:23 +00:00
2026-02-12 15:23:25 +00:00
[Tooltip("페이드 아웃 시작 거리 비율 (0.8 = 렌더 범위의 80%부터 페이드 시작)")] // 툴팁을 추가할거에요 -> 비율 설명을
[SerializeField, Range(0.5f, 1f)] // 슬라이더 범위를 지정할거에요 -> 0.5에서 1 사이로
private float _fadeStartRatio = 0.8f; // 변수를 선언할거에요 -> 페이드 시작 비율인 0.8을 _fadeStartRatio에
2026-02-02 08:30:23 +00:00
2026-02-12 15:23:25 +00:00
[Header("=== 업데이트 주기 ===")] // 제목을 표시할거에요 -> === 업데이트 주기 === 를
[Tooltip("오브젝트 컬링 검사 주기 (초 단위)")] // 툴팁을 추가할거에요 -> 검사 주기 설명을
[SerializeField, Range(0.05f, 1f)] // 슬라이더 범위를 지정할거에요 -> 0.05에서 1 사이로
private float _checkInterval = 0.2f; // 변수를 선언할거에요 -> 검사 간격인 0.2를 _checkInterval에
2026-02-02 08:30:23 +00:00
2026-02-12 15:23:25 +00:00
[Header("=== 플레이어 설정 ===")] // 제목을 표시할거에요 -> === 플레이어 설정 === 을
[Tooltip("플레이어를 찾을 태그 이름")] // 툴팁을 추가할거에요 -> 태그 이름 설명을
[SerializeField] // 필드를 직렬화할거에요 -> 인스펙터에 보이게
private string _playerTag = "Player"; // 변수를 선언할거에요 -> 플레이어 태그인 "Player"를 _playerTag에
2026-02-02 08:30:23 +00:00
2026-02-12 15:23:25 +00:00
[Header("=== 성능 설정 ===")] // 제목을 표시할거에요 -> === 성능 설정 === 을
[Tooltip("한 프레임에 처리할 최대 오브젝트 수 (0 = 무제한)")] // 툴팁을 추가할거에요 -> 처리량 설명을
[SerializeField, Min(0)] // 최소값을 지정할거에요 -> 0으로
private int _maxObjectsPerFrame = 50; // 변수를 선언할거에요 -> 프레임당 최대 개수인 50을 _maxObjectsPerFrame에
2026-02-02 08:30:23 +00:00
2026-02-12 15:23:25 +00:00
[Header("=== 디버그 설정 ===")] // 제목을 표시할거에요 -> === 디버그 설정 === 을
[SerializeField] private bool _showGizmos = true; // 변수를 선언할거에요 -> 기즈모 표시 여부를 _showGizmos에
[SerializeField] private bool _enableVerboseLogging = false; // 변수를 선언할거에요 -> 상세 로그 여부를 _enableVerboseLogging에
2026-02-02 08:30:23 +00:00
#endregion
2026-02-12 15:23:25 +00:00
#region Public Properties
2026-02-02 08:30:23 +00:00
2026-02-12 15:23:25 +00:00
public float RenderRange => _renderRange; // 값을 반환할거에요 -> 렌더링 범위 수치를
public float CheckInterval => _checkInterval; // 값을 반환할거에요 -> 검사 주기 수치를
public string PlayerTag => _playerTag; // 값을 반환할거에요 -> 플레이어 태그 문자열을
public int MaxObjectsPerFrame => _maxObjectsPerFrame; // 값을 반환할거에요 -> 최대 처리 개수를
public bool ShowGizmos => _showGizmos; // 값을 반환할거에요 -> 기즈모 활성화 여부를
public bool EnableVerboseLogging => _enableVerboseLogging; // 값을 반환할거에요 -> 로그 활성화 여부를
2026-02-02 08:30:23 +00:00
/// <summary>
/// 페이드 시작 거리 계산
/// </summary>
2026-02-12 15:23:25 +00:00
public float FadeStartDistance => _renderRange * _fadeStartRatio; // 값을 계산해서 반환할거에요 -> 렌더링 범위에 비율을 곱한 결과를
2026-02-02 08:30:23 +00:00
#endregion
#region Validation
2026-02-12 15:23:25 +00:00
private void OnValidate() // 값이 변경될 때 실행할거에요 -> OnValidate 함수를
2026-02-02 08:30:23 +00:00
{
// 유효성 검사
2026-02-12 15:23:25 +00:00
if (_renderRange < 10f) // 조건이 맞으면 실행할거에요 -> 렌더링 범위가 10보다 작다면
2026-02-02 08:30:23 +00:00
{
2026-02-12 15:23:25 +00:00
Debug.LogWarning("[RenderOptimizationConfig] Render Range가 너무 작습니다. 최소 10으로 설정됩니다."); // 경고를 출력할거에요 -> 범위 오류 메시지를
_renderRange = 10f; // 값을 설정할거에요 -> 10으로
2026-02-02 08:30:23 +00:00
}
2026-02-12 15:23:25 +00:00
if (string.IsNullOrWhiteSpace(_playerTag)) // 조건이 맞으면 실행할거에요 -> 플레이어 태그가 비어있다면
2026-02-02 08:30:23 +00:00
{
2026-02-12 15:23:25 +00:00
Debug.LogWarning("[RenderOptimizationConfig] Player Tag가 비어있습니다. 'Player'로 설정됩니다."); // 경고를 출력할거에요 -> 태그 오류 메시지를
_playerTag = "Player"; // 값을 설정할거에요 -> "Player"로
2026-02-02 08:30:23 +00:00
}
2026-02-12 15:23:25 +00:00
if (_checkInterval < 0.05f) // 조건이 맞으면 실행할거에요 -> 검사 간격이 0.05보다 작다면
2026-02-02 08:30:23 +00:00
{
2026-02-12 15:23:25 +00:00
Debug.LogWarning("[RenderOptimizationConfig] Check Interval이 너무 짧습니다. 성능에 영향을 줄 수 있습니다."); // 경고를 출력할거에요 -> 성능 영향 메시지를
2026-02-02 08:30:23 +00:00
}
}
#endregion
#region Factory Methods
/// <summary>
/// 기본 설정 생성
/// </summary>
2026-02-12 15:23:25 +00:00
public static RenderOptimizationConfig CreateDefault() // 함수를 선언할거에요 -> 기본 설정을 생성하는 CreateDefault를
2026-02-02 08:30:23 +00:00
{
2026-02-12 15:23:25 +00:00
RenderOptimizationConfig config = CreateInstance<RenderOptimizationConfig>(); // 인스턴스를 생성할거에요 -> RenderOptimizationConfig 객체를
config._renderRange = 40f; // 값을 설정할거에요 -> 40으로
config._checkInterval = 0.2f; // 값을 설정할거에요 -> 0.2로
config._playerTag = "Player"; // 값을 설정할거에요 -> "Player"로
config._showGizmos = true; // 값을 설정할거에요 -> 참(true)으로
return config; // 반환할거에요 -> 생성된 설정 객체를
2026-02-02 08:30:23 +00:00
}
#endregion
}
2026-02-12 15:23:25 +00:00
}