using UnityEngine; // 유니티 기능을 불러올거에요 -> UnityEngine을 using System.Collections.Generic; // 리스트를 사용할거에요 -> 제네릭을 /// /// 모든 몬스터의 Update를 중앙에서 관리하여 성능을 최적화하는 매니저 /// public class MobUpdateManager : MonoBehaviour // 클래스를 선언할거에요 -> 몹 업데이트 매니저를 { public static MobUpdateManager Instance { get; private set; } // 프로퍼티를 선언할거에요 -> 싱글톤 인스턴스를 private readonly List _activeMobs = new List(); // 리스트를 선언할거에요 -> 활성 몬스터 목록을 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); // 제거할거에요 -> 목록에서 } } private void Update() // 함수를 실행할거에요 -> 매 프레임마다 { // 역순 반복문: 중간에 삭제되어도 안전하게 for (int i = _activeMobs.Count - 1; i >= 0; i--) // 반복할거에요 -> 뒤에서부터 하나씩 { if (_activeMobs[i] != null && _activeMobs[i].gameObject.activeInHierarchy) // 조건이 맞으면 실행할거에요 -> 몬스터가 켜져 있다면 { _activeMobs[i].OnManagedUpdate(); // 실행할거에요 -> 관리형 업데이트 함수를 } else // 꺼져있거나 삭제됐다면 { _activeMobs.RemoveAt(i); // 제거할거에요 -> 리스트에서 정리 } } } }