Projext/Assets/Scripts/Enemy/Spawner/MonsterUpdateManager.cs

50 lines
2.3 KiB
C#
Raw Normal View History

2026-02-13 09:11:54 +00:00
using UnityEngine; // 유니티 기능을 불러올거에요 -> UnityEngine을
using System.Collections.Generic; // 리스트를 사용할거에요 -> 제네릭을
2026-02-02 08:30:23 +00:00
2026-02-13 09:11:54 +00:00
/// <summary>
/// 모든 몬스터의 Update를 중앙에서 관리하여 성능을 최적화하는 매니저
/// </summary>
public class MobUpdateManager : MonoBehaviour // 클래스를 선언할거에요 -> 몹 업데이트 매니저를
2026-02-02 08:30:23 +00:00
{
2026-02-13 09:11:54 +00:00
public static MobUpdateManager Instance { get; private set; } // 프로퍼티를 선언할거에요 -> 싱글톤 인스턴스를
2026-02-02 08:30:23 +00:00
2026-02-13 09:11:54 +00:00
private readonly List<MonsterClass> _activeMobs = new List<MonsterClass>(); // 리스트를 선언할거에요 -> 활성 몬스터 목록을
2026-02-02 08:30:23 +00:00
2026-02-13 09:11:54 +00:00
private void Awake() // 함수를 실행할거에요 -> 초기화 Awake를
{
if (Instance == null) Instance = this; // 조건이 맞으면 설정할거에요 -> 나를 유일한 인스턴스로
else Destroy(gameObject); // 아니면 파괴할거에요 -> 중복된 나를
}
public void RegisterMob(MonsterClass mob) // 함수를 선언할거에요 -> 몬스터 등록을
{
if (!_activeMobs.Contains(mob)) // 조건이 맞으면 실행할거에요 -> 목록에 없다면
{
_activeMobs.Add(mob); // 추가할거에요 -> 목록에
}
}
public void UnregisterMob(MonsterClass mob) // 함수를 선언할거에요 -> 몬스터 해제를
{
if (_activeMobs.Contains(mob)) // 조건이 맞으면 실행할거에요 -> 목록에 있다면
{
_activeMobs.Remove(mob); // 제거할거에요 -> 목록에서
}
}
2026-02-02 08:30:23 +00:00
2026-02-13 09:11:54 +00:00
private void Update() // 함수를 실행할거에요 -> 매 프레임마다
2026-02-02 08:30:23 +00:00
{
2026-02-13 09:11:54 +00:00
// 역순 반복문: 중간에 삭제되어도 안전하게
for (int i = _activeMobs.Count - 1; i >= 0; i--) // 반복할거에요 -> 뒤에서부터 하나씩
2026-02-02 08:30:23 +00:00
{
2026-02-13 09:11:54 +00:00
if (_activeMobs[i] != null && _activeMobs[i].gameObject.activeInHierarchy) // 조건이 맞으면 실행할거에요 -> 몬스터가 켜져 있다면
{
_activeMobs[i].OnManagedUpdate(); // 실행할거에요 -> 관리형 업데이트 함수를
}
else // 꺼져있거나 삭제됐다면
{
_activeMobs.RemoveAt(i); // 제거할거에요 -> 리스트에서 정리
}
2026-02-02 08:30:23 +00:00
}
}
}