实例化Unity资源束中的光子场景对象



SUMMARY:我需要使用PhotonNetwork。InstantiateSceneObject(字符串预制名称(,用于实例化AssetBundle中的对象。

在运行时,我从互联网上下载了一个Unity资产包,其中包含一堆预制件。然后我想使用光子网络。InstantiateSceneObject实例化一些预制件,但此函数只接受预制件名称字符串,但所有预制件都在资产包中,只有当您首先将对象加载为预制件,然后实例化它时,才能访问。您不能像在Resource文件夹中那样直接将其实例化为字符串名称。

AssetBundle ab=AssetBundle.LoadFromFile("c:assetsbundlename.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文件,我需要它看起来像是在资源文件夹中。

此外,"networkedmonster.prob"也在资产包中,我需要它看起来像是在资源文件夹中,这样我就可以按名称实例化它。

还有,当我用完这些资产后,如何卸载和释放它们?

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

基本上,您只需实现自己的IPrefabPool接口,然后就可以随心所欲地实例化网络对象。

请检查默认实现(punclasses.cs中的DefaultPool类(以获取示例。

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

最新更新