public class MstHairMesh : ScriptableObject
{
public Mesh _mesh;
public Material[] _mat;
}
こんな感じで指定してScriptableObjectだけAddressableAssetにすれば、暗黙的にMeshやMaterialがAssetBundleに入ってくれるんじゃないかと期待しました。
Exception encountered in operation UnityEngine.AddressableAssets.Initialization.InitializationOperation, result='', status='Succeeded' - Chain: ChainOperation of Type: MstHairMesh failed because dependent operation failed
Exception of type 'UnityEngine.AddressableAssets.InvalidKeyException' was thrown., Key=hair000
UnityEngine.ResourceManagement.ChainOperation2:OnWrappedCompleted(AsyncOperationHandle
1)
DelegateList1:Invoke(AsyncOperationHandle
1) (at
実行時エラーになりました。不可能みたいです。 Unity2019.3.4f1 Addressable1.6.2 windows editorで確認したところ正常に取得できました。サブアセットも大丈夫で
解決法
AssetReferenceT
public class MstHairMesh : ScriptableObject
{
public AssetRefMesh _mesh;
public AssetRefMat[] _mat;
}
[System.Serializable]
public class AssetRefMesh : AssetReferenceT<Mesh>
{
public AssetRefMesh(string guid) : base(guid) { }
}
[System.Serializable]
public class AssetRefMat : AssetReferenceT<Material>
{
public AssetRefMat(string guid) : base(guid) { }
}
これなら大丈夫でした。ただし、ScriptableObject読み込んだ後さらにLoadAssetAsyncをmesh materialそれぞれに対して呼ばなくちゃいけませんでした。だるいですね
Prefabから参照する
public class DummyHairMeshComp : MonoBehaviour
{
public Mesh _mesh;
public Material[] _mat;
}
GameObjectをAddressableAssetにして読み込むのはOKでした
諦めてMesh Materialを直接放り込む
AssetBundleに直接持たせる方法ですね、試してないですがきっと大丈夫です。しかし個別にLoadAssetAsync呼ぶことにはなりそう。Labelで楽できる?