1. 2인 멀티게임 
2. 오브젝트 풀링을 사용하려고 함
3. 규칙 : 무조건 마스터가 풀에서 미리 생성해두고 활성화/비활성화까지 담당함. 클라이언트는 그저 요청만 하는 것.


private void Start()  //오브젝트 미리 생성하는 과정.

    {

        poolDictionary = new Dictionary<string, Queue<GameObject>>();

        if (!PhotonNetwork.IsMasterClient) return; <- 마스터일때만 생성

        foreach (Pool data in datas)

        {

            Queue<GameObject> objectPool = new Queue<GameObject>();

            for (int i = 0; i < data.initialSize; i++)

            {

                GameObject obj = PhotonNetwork.Instantiate(data.name, Vector3.zero, Quaternion.identity); <- 포톤 네트워크로 생성

                obj.transform.SetParent(objPoolTransform, false);

                obj.GetComponent<PhotonView>().RPC("SetActiveRPC", RpcTarget.All,Vector3.zero, Quaternion.identity, false);

                objectPool.Enqueue(obj);

            }

            poolDictionary.Add(data.name, objectPool);

        }

    }



public GameObject Get(string name, Vector3 position, Quaternion rotation) //오브젝트를 꺼내쓰는것.

    {

            GameObject obj = poolDictionary[name].Dequeue();

            obj.GetComponent<PhotonView>().RPC("SetActiveRPC", RpcTarget.All, position, rotation, true);

            poolDictionary[name].Enqueue(obj);

            return obj;

    }


지금 임시로 쓰고있던 Get인데 이제 이걸 수정해야함.


1) 마스터가 풀에서 오브젝트를 생성하고 이걸 딕셔너리에 집어넣음 -> 클라이언트는 당연히 딕셔너리가 비어있음

2) 클라이언트가 Get으로 요청하는 상황발생 -> 마스터가 해당 name을 키값으로해서 대신 그걸 풀에서 꺼내줘야함

3) 근데 그러면 저 return obj에서 obj에 어떻게 넣지?????

4) 저 Get으로 오브젝트를 반환한 다음에 그 오브젝트에 Init() 함수같은 초기화 함수로 풀에서 꺼낸 오브젝트를 초기화해줘야함 당연히. 

근데 문제는 클라이언트 입장에서 Get으로 마스터한테 대신 꺼내달라고 요청한 다음에 그 대신꺼내준 오브젝트를 반환받을 방법을 모르겠음.


        var item = ObjectPoolManager.Instance.Get("Item", args.point, Quaternion.identity);

        item.GetComponent<PhotonView>().RPC("InitializeItem", RpcTarget.All, monster.DropItem);

그러니깐 이렇게 풀에서 Get으로 꺼내온 아이템을 반환받아서 거기에 초기화함수를 호출해야 하는데 클라이언트가 이걸 어떻게 받아와야할지 모르겠음.

마스터가 대신 풀에서 꺼내줘도 그걸 클라이언트가 어떻게 가질 수 있을까?? -> RPC함수를 마스터한테 요청해도 rpc로 호출한 함수는 반환타입도 무조건 void고 out 키워드도 안됨.