public static void Unregister(IAspectSpawn spawn)
        {
            if (spawn == null || spawn.Aspect == null)
            {
                return;
            }

            List <IAspectSpawn> list;

            if (!Spawn.TryGetValue(spawn.Aspect, out list))
            {
                return;
            }

            if (list == null)
            {
                Spawn.Remove(spawn.Aspect);
                return;
            }

            list.Remove(spawn);

            if (list.Count == 0)
            {
                Spawn.Remove(spawn.Aspect);

                ObjectPool.Free(list);
            }
        }
        public static void Register(IAspectSpawn spawn)
        {
            if (spawn == null || spawn.Aspect == null)
            {
                return;
            }

            List <IAspectSpawn> list;

            if (!Spawn.TryGetValue(spawn.Aspect, out list) || list == null)
            {
                Spawn[spawn.Aspect] = list = ListPool <IAspectSpawn> .AcquireObject();
            }

            list.AddOrReplace(spawn);
        }