unity2019.1.12でprefabからalembicStreamPlayer参照してる状況です。Editorで再生すると正常ですがBuildするとalembicが消えました。
悲しいことに動的読み込みは想定されてませんでした
シーンに埋め込む
単純ですが、動的読み込みとは…ということになります。そもそもabcファイルデカすぎるから動的に読み込みにしたいのに…
とはいえ一応mp3とかみたくストレージからの動的読み込みならabcが丸々メモリにのることはなかろうということでdevelop buildでメモリ使用量測定してみました
結論からいうとまぁいいかなという感じ
Textureがなんで33→100Mになってるのか理解できないですが、全部で364MBのabcファイル参照したAlembicStreamPlayerを置いてもメモリ使用量は爆発しないです。
自前でabcファイルへのパスを書き換える
これ参考にして書き換える系です。StreamDescriptor自体はScriptableObjectでPathToABCはただのstringなので書き換えればいいわけです。いいわけなんですがinternalでアクセスできないのでreflection使うとかになるっぽいです。
一番下の方にalembic packageに自作のアクセサcomponentを追加することで割と手軽にinternalなalembic系にアクセスできるようになります。これの応用でなんとかprefabのPathToABCを書き換えてabc動的アクセス成功しました
[MenuItem("Masak/Replace")]
public static void Replace()
{
var go = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Resources/aaa.prefab");
var ctr = go.GetComponentInChildren<AlembicStreamController>();// 自作クラス
ctr.SetPathToABC("test.abc");
}
コツはBuild直前に書き換えること。Build後もEditorで見れるにはどうすればいいかな…要検証です
abcを指定パスにコピー
最も単純です。Editor側でPathToABC=”Assets/test.abc”となっているならビルド後にできた{project}_Data/StreamingAssets/Assets/test.abcにコピーしてやるというものです。