はじめに
UnityのTimelineを使って実装しているプロジェクトをUnity2019にアップグレードしたら、Activation Trackを設定しても、オブジェクトがアクティブにならないと言う問題が発生しました。
解決方法
下記の通り記載したlink.xmlファイルを作成し、Assetsフォルダ下に置く。
場所はAssetsフォルダ以下であればどこでも動くと思います。
<linker>
<assembly fullname="UnityEngine.Timeline" preserve="all"/>
<assembly fullname="Unity.Timeline" preserve="all"/>
<assembly fullname="UnityEngine">
<namespace fullname="UnityEngine.Playables" preserve="all"/>
</assembly>
</linker>
目次
その時の状況
- Unity2018→Unity2019.2.12f1へ移行
- TimelineをAssetBundle化していた
- Il2cppビルドを有効化
上記の状態で実装していて問題が発生しました。
原因
原因は、UnityのStrip Engine Codeと言う機能でした。
Strip Engine Codeとは、ビルド時に必要のないEngine部分のコードをUnityが判別して削ってビルドしてくれる機能です。
AssetBundleを運用している場合だと、アプリ側にはビルドした元のファイルが入っていないので、使用していない機能のコードが削られてしまう仕様らしく、
その結果AssetBundle化していたTimelineの一部のコードが削られてしまい、上手く機能していなかったみたいです。
で、上記で記載したlink.xmlと言うのは、このStrip Engine Codeで削って欲しくないコードを指定することができるファイルです。
今回はTimeline関連のコンポーネントを記載したため、上手く動くようになりました。
Strip Engine Codeの余談
ちなみにこのStrip Engine Codeですが、Unity2019かつil2cppビルドだとManage Stripping Level(Stripする強さ?を選べるもの)がLowからしかないのです。
(Strip Engine Codeのチェックを外してもStripされているみたい)
MonoビルドだとDisableの項目があるので、Monoビルドでない限りは完全な無効化はできないみたいですね…
コメント