Unity3d:从dll加载ScriptableObject

时间:2018-01-31 17:03:28

标签: c# ios unity3d

我有2个项目, 第一个项目是独立应用程序,我正在创建一个assetbundle 带有几个预制件和一个包含脚本的对象 我的应用程序的一些设置。(我有大约30个独立的应用程序和每个 有自己的资产捆绑)。

第二个项目是商店应用(如Kindle),用户可以购买我的应用并在其中使用,而不是通过应用商店或谷歌播放购买。

因此,为了让我更轻松地管理代码,我已经从第一个项目中创建了一个dll。

到目前为止一切顺利。

当我试图在我的第二个项目中加载可编写脚本的对象时(它现在在dll中),我得到Null Reference异常, 对其名称进行重新分配会告诉我assetbundle包含设置文件。

这是我的可编写脚本的对象:

 public class BookOnLoadSettings : ScriptableObject {

    public string bookName = "";

    public int numberOfPages;
    public bool isMultiResoluion = false;
    public bool UsePageSelectionPanel = false;

    public BookInnerPagesTransition.BookDirectionType
        BookDirection = BookInnerPagesTransition.BookDirectionType.Rtl;
    public ScreenOrientation Orientation = ScreenOrientation.Landscape;
    public InnerPagesUIButtonsSettings innerPagesUIButtonsSettings;
    public AudioClip soundTrackClip;
    public float SoundtrackVolum = 0.5f;


}

这是我得到null异常的代码:

private void OnGUI()
    {
        if (GUI.Button(new Rect(0, 0, 100, 100), ""))
        {
            var fileName = "myBook.hdd";
            var path = Path.Combine(Application.streamingAssetsPath, fileName);
            Debug.Log(path);
            StartCoroutine(_run(path));

        }
    }

 private IEnumerator _run(string  path)
    {
        var request = AssetBundle.LoadFromFileAsync(path);
        yield return request;
        var assetBundle = request.assetBundle;
        if (assetBundle == null)
        {
            Debug.LogError("_assetBundle is null");

        }

        foreach (var assetName in assetBundle.GetAllAssetNames())
        {
            Debug.Log("assetName: "+assetName);
            var obj = assetBundle.LoadAsset(assetName);
            Debug.Log(obj.GetType().Name);
        }

        //

        BookOnLoadSettings settings = assetBundle.LoadAsset<BookOnLoadSettings>(
            "onloadsettings.asset" 
        );


        Debug.Log("is settings null: "+(settings == null).ToString());


        yield return 0;
    }

所以它在assetbundle中打印资产名称, 但是没有加载它,而资产捆绑中的其他资产 按预期加载。 在我的第一个可脚本化对象的项目中不会发生此问题 不在dll里面。

那么我做错了什么? :)

感谢。

0 个答案:

没有答案