从Unity资产捆绑包实例化光子场景对象

时间:2019-10-29 01:04:49

标签: unity3d photon

摘要:我需要使用PhotonNetwork.InstantiateSceneObject(字符串prefab_name)来实例化AssetBundle中的对象。

在运行时,我从互联网上下载了一个包含大量预制件的Unity资产捆绑包。然后,我想使用PhotonNetwork.InstantiateSceneObject实例化某些预制件,但是此函数仅接受预制件名称字符串,但是所有预制件都在资产束中,并且仅当您首先将对象加载为预制件然后实例化时才能访问它。您不能直接将其实例化为字符串名称,就像在资源文件夹中一样。

AssetBundle ab=AssetBundle.LoadFromFile("c:\assets\bundlename.android");
var prefab=ab.LoadAsset("networked_monster.prefab");

PhotonNetwork.InstantiateSceneObject("networked_monster.prefab");  <<------ this wont work, cant access asset bundle from Photon

有没有办法解开资产捆绑包中的所有预制件和其他对象的包装,以便使其看起来好像它们都位于资源文件夹中一样???然后,我将能够像这样访问它们

PhotonNetwork.InstantiateSceneObject("networked_monster.prefab"); 
AudioClip audio=Resources.Load("BangZoom") as AudioClip; 

此处BangZoom是一个位于资产捆绑包内的wav文件,我需要它像在资源文件夹中一样显示。

“ networked_monster.prefab”也位于资产捆绑包中,我需要它像在资源文件夹中一样显示,以便我可以按名称实例化它。

在用这些资产处理完这些资产后,我又该如何卸载和释放这些资产?

1 个答案:

答案 0 :(得分:0)

我刚刚在我们的论坛上回答了相同的问题:https://forum.photonengine.com/discussion/14956/photonnetwork-instantiatesceneobject

基本上,您只需实现自己的IPrefabPool接口,然后就可以按照想要的方式随意实例化网络对象。

请检查默认实现(例如punclasses.cs中的DefaultPool类)。

再见

吉恩

我不确定要卸载,最好在Unity论坛或UA上询问