

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManagerEx
{
GameObject _player;
//Dictionary<int, GameObject> _players = new Dictionary<int, GameObject>();
HashSet<GameObject> _monsters = new HashSet<GameObject>();
public Action<int> OnSpawnEvent;
public GameObject GetPlayer() { return _player; }
public GameObject Spawn(Define.WorldObject type, string path, Transform parent = null)
{
GameObject go = Managers.Resource.Instantiate(path, parent);
switch (type)
{
case Define.WorldObject.Monster:
_monsters.Add(go);
if (OnSpawnEvent != null)
OnSpawnEvent.Invoke(1);
break;
case Define.WorldObject.Player:
_player = go;
break;
}
return go;
}
public Define.WorldObject GetWorldObjectType(GameObject go)
{
BaseController bc = go.GetComponent<BaseController>();
if (bc == null)
return Define.WorldObject.Unknown;
return bc.WorldObjectType;
}
public void Despawn(GameObject go)
{
Define.WorldObject type = GetWorldObjectType(go);
switch (type)
{
case Define.WorldObject.Monster:
{
if (_monsters.Contains(go))
{
_monsters.Remove(go);
if (OnSpawnEvent != null)
OnSpawnEvent.Invoke(-1);
}
}
break;
case Define.WorldObject.Player:
{
if (_player == go)
_player = null;
}
break;
}
Managers.Resource.Destroy(go);
}
}
실험

pooling 을 할 경우 널체크만으로 부족
개선 사항

초기화(initialization)란 프로그래밍에서 데이터 오브젝트나 변수의 초깃값 할당을 의미한다.