Photon Pun2 리소스(Resources) 폴더 아닌곳에서 생성하는법,에셋번들 어드레서블(Addressable) 같이 사용하는법

2022. 7. 11. 20:17유니티 unity

포톤 문서를 참고했습니다

 

https://doc.photonengine.com/ko-kr/pun/current/gameplay/instantiation

 

인스턴스생성 | Photon Engine

Cookie 설정 Photon은 귀하를 로그인 사용자로 식별하고 품질을 개선하고 마케팅을 위해 쿠키를 사용합니다. 아래 Cookie 설정을 확인하고 프라이버시를 관리해 주시기 바랍니다. 당사가 Cookie를 사용

doc.photonengine.com

 

게임이 시작하면 포톤에서 알아서  Resources 폴더에있는 포톤오브젝트들을 포톤오브젝트리스트안에넣는데

다른 폴더에있다면 리스트안에 없기때문에 오류가 나오기 때문에 따로 넣어줘야합니다.

 

DefaultPool를 사용하면 됩니다.

 


DefaultPool Pool = PhotonNetwork.PrefabPool as DefaultPool;

Pool.ResourceCache.Add(이름, 오브젝트); 
// 여기서 이름은 PhotonNetwork.Instantiate(이름) 입니다. 보통 오브젝트 이름을 넣습니다.


------ 예시 ------


public GameObject ob;

void Start()
{
    DefaultPool Pool = PhotonNetwork.PrefabPool as DefaultPool;
    Pool.ResourceCache.Add(이름, ob); 
   
}


void 생성()
{
	PhotonNetwork.Instantiate(이름,위치,회전값);

}

 

 

 

번외로 Resources폴더안에 또 폴더를 넣고 하면 인식을 안하는데 경로까지 넣으면 됩니다

 

PhotonNetwork.Instantiate("경로/오브젝트이름", 위치, 회전값);

//예시

//Resources 폴더에있는 Effect 라는 폴더에 있는 프리팹(이름boom)을 가져오고싶다

PhotonNetwork.Instantiate("Effect/boom", 위치, 회전값);

 

 

에셋번들이나 어드레서블 사용할때는 에셋들을 불러온뒤  오브젝트을 받아오고 똑같이 그 오브젝트들을 DefaultPool 로 이용해서 넣어주면 됩니다.

간단하게 생각해서 DefaultPool 안에 넣어주면 되면 끝납니다.

 

 

어드레서블(Addressable)로 예시를 보여드리겠습니다.

 

// 어드레서블 예시입니다. 보통 한번에 에셋들을 불러올때 그때 처리를 하는데 그때 해도 됩니다.

public AssetReference[] obs; //불러올 오브젝트들


async void Start()
{

    DefaultPool defaultPool = PhotonNetwork.PrefabPool as DefaultPool;

    foreach (var ob in obs)
    {

        Task<GameObject> task = ob.LoadAssetAsync<GameObject>().Task; // 불러옵니다.

        await task; //대기.
        defaultPool.ResourceCache.Add(task.Result.name, task.Result); // 넣기
        ob.ReleaseAsset();//메모리에 올라간 에셋을 해제
    }

{