Photon Pun2 리소스(Resources) 폴더 아닌곳에서 생성하는법,에셋번들 어드레서블(Addressable) 같이 사용하는법
2022. 7. 11. 20:17ㆍ유니티 unity
포톤 문서를 참고했습니다
https://doc.photonengine.com/ko-kr/pun/current/gameplay/instantiation
게임이 시작하면 포톤에서 알아서 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();//메모리에 올라간 에셋을 해제
}
{
'유니티 unity' 카테고리의 다른 글
Mathf 함수 전부 알기 (0) | 2022.07.17 |
---|---|
랜덤 원형안에 오브젝트 생성시키기 (0) | 2022.07.17 |
3d 오브젝트 드래그로 이동시키기 (0) | 2022.07.15 |
Handles와DrawGizmos 활용해서 시야각만들기 (0) | 2022.07.12 |
유니티 멀티쓰레드 사용시 UI가 아무런 변화가 없을때 (0) | 2022.07.11 |