来自assetBundle的Unity网络生成对象给出错误

时间:2019-01-05 18:54:38

标签: c# unity3d unity3d-unet

因此,我一直在尝试将资产捆绑软件与unity的unet系统配合使用。每当我从Assetbundle中加载播放器预制件并将其设置为NetworkManager中的playerPrefab并尝试加入游戏时,都会出现以下错误:无法生成服务器对象,您是否忘记将其添加到NetworkManager?托管游戏的玩家(服务器)不会发生这种情况

当我使用Resources.Load()加载播放器预制件时,它可以很好地工作,但是我不能使用Resources.Load()。使用ClientScene在代码中注册播放器预制组件。RegisterPrefab(myPlayerPrefab)都不起作用。

这是我用来加载我的资产捆绑并让玩家预制的东西:     私有静态字典loadingAssets = new Dictionary();

public static void LoadAssets()
{
    //Bundle: player
    LoadAssetBundle("player", Directory.GetCurrentDirectory() + "/Assets/Resources/AssetBundles/");
}
private static void LoadAssetBundle(string bundleName, string bundleUrl)
{
    AssetBundle currentBundle = AssetBundle.LoadFromFile(bundleUrl + bundleName);

    Object[] bundleAssets = currentBundle.LoadAllAssets();
    foreach(Object bundleAsset in bundleAssets)
    {
        loadedAssets.Add(bundleAsset.name, bundleAsset);
    }
}
public static Object GetAsset(string assetName)
{
    return loadedAssets[assetName];
}

这是我在NetworkManager中设置播放器预制件的方式:     networkManager.playerPrefab = AssetHandler3.GetAsset(“ Player”)作为GameObject;

我希望能够使用assetBundles在NetworkManager中设置我的playerPrefab,而不会出现服务器未能生成对象的错误。如果无法做到这一点,我有另一种方法可以完成这项工作,但我需要一种无需使用Resources.Load();即可在路径上获得预制件的方法。

谢谢!

0 个答案:

没有答案