티스토리 툴바


엔진/unity3d2011/05/18 19:12

다음 사이트를 참조하였습니다.

http://www.youtube.com/watch?v=IX041ZvgQKE&feature=related

동영상에 나오는 소스 코드를 정리한 것입니다.
상세한 설명은 동영상을 참조하세요.

using UnityEngine;
// using System;  <- 이것이 있으면 object vs Object가 헷갈려합니다. (Java와 UnityEngine사이에서 혼동)
using System.Collections;
using System.Collections.Generic;
using System.Linq;


public class ObjectRecycler
{

    public    delegate void    ObjectRecyclerChangedEventHandler(int available, int total);
    public    event    ObjectRecyclerChangedEventHandler onObjectRecylerChanged;

    private    List<GameObject>    objectList;
    private    GameObject    objectToRecycle;

   
    public ObjectRecycler (GameObject obj, int totalObjectsAtStart)
    {
        objectList = new List<GameObject>(totalObjectsAtStart);
        objectToRecycle = obj;

        for (int i = 0; i < totalObjectsAtStart; i++) {
            GameObject newObject = Object.Instantiate(obj) as GameObject;
            newObject.gameObject.active = false;
            objectList.Add(newObject);
        }
    }
   
 
    private    void    InfoChangedEvent() {

        if (onObjectRecylerChanged != null) {

      var allFree =     from item in objectList
                                        where item.active == false
                                        select item;

            onObjectRecylerChanged(allFree.Count(), objectList.Count);
        }
    }

   
    public    GameObject    NextFree{

        get {
                var freeObject = ( from item in objectList
                                         where item.active == false
                                         select item).FirstOrDefault();
 

            if (freeObject == null) {
                freeObject = Object.Instantiate( objectToRecycle ) as GameObject;
                objectList.Add(freeObject);
            }

            freeObject.active = true;

            InfoChangedEvent();
            return freeObject;
        }
    }

   

    public    void    FreeObject(GameObject objectTorFree) {

                 objectTorFree.gameObject.active = false;
                 InfoChangedEvent();
    }

}





저작자 표시
Posted by 붉은용기병
TAG ,