我有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里面。
那么我做错了什么? :)
感谢。