CRIWARE Unity Plugin Manual  Last Updated: 2024-04-24
よくある質問・トラブルシューティング
Asset Support Add-onに関する、不明点やトラブルがある際は下記をご確認ください。

CIビルドが失敗する

DllNotFoundExceptionやentryPointNotFoundExceptionが出ている場合

Linux上でDllNotFoundExceptionが発生している場合、「 Linux上での実行時にDllNotFoundExceptionが発生する 」をご確認ください。

上記ページの方法で問題が解消しない場合、プラグインライブラリの実行権限が無いために例外が生じている可能性があります。
CI環境上でAssets/CRIMW/CriWare/Runtime/Platforms/以下のライブラリ群が実行可能な状態かご確認ください。
特に、ビルド実行時にバージョン管理システムからUnityプロジェクトを取得すると実行権限がない状態になる場合があります。
この場合、取得後にUnityを起動する前にライブラリの権限変更を行ってください。

また、CriManaUsmAssetImporterが例外を生じている場合、USMアセットの[Import Movie Info]を無効にすることでDLL実行権限は不要になります。
ただし、[Import Movie Info]が無効な場合はCriManaUsmAsset.MovieInfoが無効な値となることにご注意ください。

ビルドマシンのメモリが枯渇している場合

過去のCRI Addressablesではバンドルビルド時にプロジェクト内のアセットを大量にロードしてしまう問題がありました。
CRI Addressables 0.6.05で修正済みのため、それ未満のバージョンをお使いの場合は最新版をお試しください。

CRI Addressablesを使ったアセットが再生できない

以下についてご確認ください。

ビルトインシーンからの直参照になっていないか

CRI Addressablesで管理するCRIアセットは必ずAddressablesのAPI経由でロードする必要があります
  • Addressables.LoadAssetAsync
ビルトインシーンや、ビルトインシーンが参照するPrefabからCRIアセットを参照すると、
CRIアセットに対応するNon-Assetデータが存在しない状態となるためデータのロードができません。

また、Addressablesにて管理するアセットをビルトインシーンから参照した場合は同じデータの複製を多重に持ってしまうため、
Addressables Asset Systemの利用方法として推奨されていません。
このような不正な参照が存在しているかは、Addressables Analyzeツールを利用して確認できます。

Resourceフォルダからの参照になっていないか

同様にResourceフォルダのアセットや、その依存先としてロードした場合も正常に再生できません。
Resourceフォルダではなく、Addressablesを用いて管理/ロードを行うことをご検討ください。

DeployType をスクリプトから指定したい

CriWare.Assets.CriAssetImporter.implementation を操作することでDeployTypeを変更できます。
次の例ではAssetPostprocessorとしてDeployTypeの自動設定を行います。
public class MyCriAssetPostprocessor : UnityEditor.AssetPostprocessor
{
void OnPreprocessAsset()
{
CriAssetImporter importer = assetImporter as CriAssetImporter;
if (importer == null) return; // CRIアセットではない場合return
// この例では拡張子に応じて異なるDeployTypeを指定
var extension = System.IO.Path.GetExtension(assetImporter.assetPath);
if (extension == ".acf" || extension == ".acb") // OnMemory
importer.implementation = new CriSerializedBytesAssetImplCreator();
if(extension ==".awb" || extension == ".usm") // Addressables
importer.implementation = new CriCustomAddressableAssetImplCreator();
}
}
CriWare.Assets.CriAssetImporter.implementation には CriWare.Assets.ICriAssetImplCreator を継承するインスタンスを指定します。
CRI Assets/CRI Addressablesの標準実装では、次の3種が利用できます。
実際にDeployTypeの反映が行われるのは CriWare.Assets.CriAssetImporter.implementation の変更後にアセットが再インポートされたタイミングです。
AssetPostprocessorで操作を行う場合は直後に再インポートが行われますが、任意のタイミングで反映したい場合は次のようなコードで再インポートを行ってください。
EditorUtility.SetDirty(importer);
importer.SaveAndReimport();

Addressablesに登録するアセットの種別

CRI Addressablesの利用方法として、CRIアセットをAddressable Groupに登録の有無はどちらでも問題ありません。

CRIアセットのアドレスを指定してロードする場合

Addressables管理下のCRIアセットを単体でロードする場合、任意のAddressableGroupに直接登録してください。

CRIアセットに依存するアセットをロードする場合

CRIアセットがプレハブやシーンから参照されている場合、CRIアセットをAddressablesに登録する必要はありません。
参照元のシーンやアセットをAddressableGroupに登録し、参照元アセットのロードした際にCRIアセットもロードされます。

AWBアセットについて

AWBアセットは、通常必ずACBアセットから参照されています。
このため、ACBアセットがロードできる状態であればAWBアセットをAddressablesに登録する必要はありません。