CRIWARE Unity Plugin Manual  Last Updated: 2024-12-05
トラブルシューティング
CRIWARE Unity Plug-in利用時に発生するエラーやトラブルの対処方法について説明します。
【Unity】
【ADX】
【Sofdec】
【ファイルマジックPRO】
【Android】
【iOS】
【WebGL】

パッケージの再インポート時に「Move file failed」などのエラーが発生する場合

【概要】

Unity Editor上で、CRIWARE Unity Plug-inパッケージを再インポートする際に「Move file failed」などの エラーが発生してインポートに失敗する。

【対策】

シーンのロード中にパッケージの再インポートを行うと、一部のファイルを上書きする際にエラーが発生する 場合があります。一度プロジェクトを閉じて、シーンをロードしていない状態からインポートを行ってください。

ページTOP


CRIWARE Unity Plug-in Ver.2.5x パッケージのインポート後、未定義参照エラーが発生する場合

【概要】

Unity Editor上で、CRIWARE Unity Plug-in Ver.2.5x パッケージをインポートした後で「`CriManaPlugin' does not contain a definition for `criManaUnityPlayer_UpdateTextureByID'」というエラーが発生してしまう。

【対策】

CRIWARE Unity Plug-in Ver.2.0x から Ver.2.5x に移行する場合、不要なファイルがUnityプロジェクト内に残り、トラブルの原因となる恐れがあります。
Ver.2.5x のunitypackageをインポートする前に、必ず以下のファイルとフォルダを削除してください。
  • Plugins/CriWare/CriMana/Details/CriManaPlayerImpl.cs
  • Plugins/CriWare/CriMana/Details
  • Plugins/CriWare/CriMana/Shaders/DesktopAdditive.shader
  • Plugins/CriWare/CriMana/Shaders/DesktopAlpha.shader
  • Plugins/CriWare/CriMana/Shaders/DesktopAlphaAdditive.shader
  • Plugins/CriWare/CriMana/Shaders/DesktopRGB.shader
  • Plugins/CriWare/CriMana/Shaders/GLES20Additive.shader
  • Plugins/CriWare/CriMana/Shaders/GLES20Alpha.shader
  • Plugins/CriWare/CriMana/Shaders/GLES20AlphaAdditive.shader
  • Plugins/CriWare/CriMana/Shaders/GLES20RGB.shader
  • Resources/CriWare/CriMana/DesktopShaderHolder/Additive.prefab
  • Resources/CriWare/CriMana/DesktopShaderHolder/Alpha.prefab
  • Resources/CriWare/CriMana/DesktopShaderHolder/AlphaAdditive.prefab
  • Resources/CriWare/CriMana/DesktopShaderHolder/RGB.prefab
  • Resources/CriWare/CriMana/MobileShaderHolder/Additive.prefab
  • Resources/CriWare/CriMana/MobileShaderHolder/Alpha.prefab
  • Resources/CriWare/CriMana/MobileShaderHolder/AlphaAdditive.prefab
  • Resources/CriWare/CriMana/MobileShaderHolder/RGB.prefab
  • Resources/CriWare/CriMana
  • Resources/CriWare

ページTOP


Unityプラグインパッケージのアップデートを行うとコンパイルエラーが発生する

【概要】

Unityプロジェクトに既にプラグインをインポートしてある状態で、新しいプラグインパッケージ(.unitypackage)をインポートすると
以下のようなエラーメッセージが表示されコンパイルエラーとなる。
error CS0246: The type or namespace name 'XXXXX' could not be found (are you missing a using directive or an assembly reference?)

【対策】

CRIWARE Unity SDK v3.03.00(プラグインバージョン v2.35.32)より、Assembly Definition対応および
namespace対応を行っています。
https://criware.info/criware-unity-plug-in-3-03-00/
したがって旧構成のプラグインをインポートしているプロジェクトで、新構成(Assembly Definition対応版)をインポートすると
namespaceの食い違いや、参照関係が崩れてしまいコンパイルエラーとなります。

旧構成から新構成プラグインへ乗り換える場合は プラグインパッケージ移行ガイド に従いアップデートください。
ページTOP

UnityのAssetBundleに配置しているADX/Sofdecファイルを直接再生できない

【概要】

UnityのAssetBundleに配置しているADX/Sofdecファイルについて直接音声、
動画を再生したいが方法がわからない。

【対策】

  • Asset Support add-on とUnityのAddressable Asset Systemを併用ください。
    CRI Assets によりアセット化したデータは CRI Addressables の機能によりAddressable Asset Systemでのロードが可能になります。
    これによりAssetBundleに含められた場合でも、ロード時にメモリに展開することなくストリーミングでの読み込みが可能になります。
  • 上記の方法以外ではACBファイルやCPKファイルなどを含むAssetBundleから直接音声、動画をストリーミング再生することは不可能です。
    その場合、AssetBundleではなくNon-Asset CRI データを直接ダウンロードしてご利用ください。

ページTOP


Unity Editor上にてシーン再生中、スクリプトを更新するとエラーが発生してしまう。

【概要】

Unity Editor上にて、再生(Playmode)中にスクリプト(アプリケーション側・
プラグイン側問わず)の編集を行うと、CRIのエラーやNullReferenceExceptionといった
エラーが発生してしまうことがある。

【対策】

現状、シーン再生中にスクリプト更新(ホットリロード)には非対応になります。

アプリケーション実行中にスクリプトの編集を行った場合、編集したスクリプトだけでなく、
スクリプトの全体の再コンパイルが入ります。その結果、プラグイン内部のstatic変数が
デフォルト状態にリセットされ、正常動作できない状態になります。

Unity Editorで再生(Playmode)中の場合、スクリプトを直接編集しないでください。
もし、誤って再生中にスクリプトを編集してエディタの実行を停止した場合、
プラグイン内部的に異常終了している恐れがあります。
そのため、例外が発生した場合は、一度Unity Editorを再起動することを推奨します。

ページTOP


Linux上での実行時にDllNotFoundExceptionが発生する

【概要】

Unityエディタやビルド済みサーバーアプリケーションをLinux上で実行した場合に
DllNotFoundException が発生してプラグイン機能を利用できない場合がある。

【対策】

Linux向けCRIWAREライブラリを利用するには、環境にPulseAudioドライバを導入する必要があります。
PulseAudioドライバがインストールされているか確認してください。

アプリケーションがサーバー用途であり、音声/動画の再生が必要ではない場合、
Script Define Symbolsとして CRIWARE_ENABLE_HEADLESS_MODE を追加することでも問題を回避できます。
  • CRIWARE_ENABLE_HEADLESS_MODE が有効な場合、CRIWARE内のDLL呼び出しは全てスキップされます。
  • CRIWAREの一部API(ステータスの取得等)が常に無効値を返すようになります。

ページTOP


iOS/Android対応アプリ開発時、CRI Atom Craftのビルドターゲット設定とUnityへの組み込みがわからない

【概要】

iOS/Android対応アプリ開発時、CRI Atom Craftのビルドターゲット設定が
複数あって、それぞれサウンドデータを出力して組み込む必要があるのか
わからないです。

【対策】

サウンドデータをiPhone用/Android用に分けて出力する必要はありません。

例えばアプリ開発初期段階ではiPhoneで出力した1つのサウンドデータをUnityへ
組み込みPC/Mac/iOS/Android共通で利用するのをお勧めします。

その後、開発を進めていく中でiPhone用/Android用でそれぞれエンコード品質を
変えたいなどの事情がでてきましたら、サウンドデータを分けて出力するなどの
対応を行って下さい。

ページTOP


HCA-MX 音声の再生がうまくいかない

【概要】

HCA-MX 音声を再生したいが、失敗する。

【対策】

以下の点をチェックしてください。
  1. CRIWARE Library Initializer の 設定を見直してください。Atom Config の HCA-MX Voice Pool Config に注意が必要です。基本的に、再生にはボイスプール数を増やさなければいけません。
  2. CRIWARE Library Initializer の 設定を見直してください。Atom Config の Sampling Rate に注意が必要です。HCA-MXデータ使用時は、データのサンプリングレートと同じレートを指定する必要があります。
  3. Android の場合、 Android低遅延音声再生 を使っていませんか? HCA-MX は低遅延再生に非対応です。

ページTOP


Sofdec.Primeで高解像度のムービエンコードに失敗する

【概要】

4K素材といった高解像度のムービエンコードに失敗するケースがあります。

【対策】

Sofdec.Primeの内部エンジンの都合上、4K素材といった高解像度のムービエンコードに
失敗するケースがあります。

詳細や回避策についてはSDKに同梱の「Sofdecツール」ユーザーズマニュアル
(cri/tools/Sofdec2/CRI_Sofdec2_Tools_Manual_j.chm)に記載の
「Tips>高解像度のムービデータをエンコードするには? 」の項目をご参照ください。

ページTOP


ファイルマジックPROのインストール機能でダウンロードに失敗する

【概要】

ファイルマジックPROのインストール機能でサーバからファイルをダウンロード
することができない。

【対策】

ファイルマジックPROのインストール機能でサーバからのファイルダウンロードが
上手くいかない場合は以下の点についてご確認下さい。
  • <インストール先のディレクトリ存在確認>
    インストール先のパスに、存在しないディレクトリが含まれていると
    インストールに失敗します。存在しないディレクトリにファイルを
    インストールする際は事前にディレクトリを作成するようにしてください。
  • <ファイルを配置しているサーバの設定>
    • 「MIMEの種類」の設定不足により、サーバーがファイルを認識できない
      状態になっていないか。
    • 特定の拡張子のみダウンロード許可を与えていないか?
      ("cpk"、"acb"、"awb"、"acf"などの拡張子についてダウンロード許可が
      あるか?)
    • サーバのエラーログにインストール失敗に関連したメッセージは
      残っていないか?
  • <ファイルパスの再確認>
    サーバ上に目的のファイルが正しく配置されているか?

ページTOP


ファイルマジックPROのインストール機能でダウンロードしたファイルが破損している

【概要】

ファイルマジックPROのインストール機能でサーバーからダウンロードしたファイルが
破損している。

【対策】

ファイルマジックPROのインストール機能でサーバーからダウンロードしたファイルが
破損している場合はサーバのRangeヘッダ設定が有効になっているかご確認下さい。

ファイルマジックPROのインストール機能は、HTTP/1.1のでサーバから
のデータの転送を行います。データをダウンロードする際、GETリクエストに
Rangeヘッダを付加しています。
そのため、サーバ側でRangeヘッダが無効になっているとデータが正しくダウンロード
することができません。先頭から数MB以降のデータが壊れてしまいます。

【補足】
破損内容についてはCriWareInitializerコンポーネントの「Initialize FileSystem」
グループ設定内の「Install Buffer Size」で設定されているサイズ以降のデータが
不正なものになる可能性があります。
例えば「Install Buffer Size」の設定が4MBだった場合、先頭4MB以降のデータが
おかしくなります。サーバの挙動に依存しますが、先頭4MBのデータが繰り返し
書き込まれてしまうというケースが過去にありました。

ページTOP


ファイルのインストールが終わらない場合

【概要】

CriWare.CriFsWebInstaller クラスによるネットワークからのファイルインストールが終わらない。

【対策】

CriWare.CriFsWebInstaller の初期化コンフィグで設定できるCriWare.CriFsWebInstaller.ModuleConfig.inactiveTimeoutSec を適切な値に設定してください。
何らかの問題でインストールが滞っている場合に、設定した経過時間でエラー判定を行います。

ページTOP

Android端末のマナーモード時にADX音声が鳴ってしまう

【概要】

Android端末のマナーモード時にADX音声が鳴ってしまう。

【対策】

CRI Atomライブラリには「マナーモードを検知して自らをミュート状態にする」機能は
ありません。そのため、マナーモードの検知とミュート操作についてはアプリケーション側で
ケアして頂く必要があります。

Atomライブラリのミュートについては以下の手段がありますのでご参考ください。
  1. 全てのAtomExPlayerの音量を0にする。
    (注:このアプリ内でのみ影響しますが、全てのAtomExPlayer音量を管理する必要が
    あります。Atomライブラリ自体に一括ミュート機能はありませんのでご注意下さい)
  2. Androidのメディア音量を0にする。
    Android APIのandroid.media.AudioManagerを介してメディア音量
    (AudioManager.STREAM_MUSIC)を0にします。
    (注:対象アプリ以外のメディア音量にも影響します)

ページTOP


「Split Application Binary」オプションで作成した.OBBからADX/Sofdecデータを再生できない

【概要】

「Split Application Binary」オプションで作成した.OBBから、直接 ADX/Sofdec データを再生することはできません。 アプリケーション側で.OBBから対象ファイルを別ファイルとして書き出し、そちらを再生してください。

【対策】

UnityEditorの「Split Application Binary」オプションにより、StreamingAssets以下の内容を分割アプリケーションバイナリ (.OBB) へ分割することができます
しかしCriWareプラグインは、.OBBファイルからADX/Sofdecデータを直接再生できません。
Split Application Binaryについて
「Split Application Binary」はUnity Editorの機能です。本オプションは.apk を拡張ファイル( .apk + .obb )へ分割します。詳細についてはUnity公式ドキュメントをご参照ください。
Unity Editor上で本オプションを有効にした場合、StreamingAssetsにあるデータは全て *.main.obbというZip化された別ファイルにアーカイブされてしまいます。
CriWareプラグインは、Zipファイル内のADX/Sofdecデータを直接再生することはできません。
.obbファイル内のADX/Sofdecデータを再生する方法
「Split Application Binary」にて弊社データを取り扱う場合は、.obbファイル内ADX/Sofdecデータを単体ファイルに書き出してください。
.obbからのデータ書き出しには、UnityEngine の WWWクラスが利用できます。書き出したファイルを CriWareプラグインで再生してください。以下、.obbからの書き出し処理のサンプルコードを示します。
using System.Collections;
using System.IO;
/* srcPath から dstPath にファイルを書き出すクラス */
public class FileExtracter : MonoBehaviour {
/* UnityプロジェクトのStreamingAssets以下に配置したUSMファイル名。
* Split Application Binary を有効にした場合、StreamingAssets以下は .obb ファイルにパッキングされます */
private string srcFile = "criware_movie.usm";
/* この例では出力先をSDカード上にしています。適宜、環境に応じて変更してください。
* また、UnityのAndroid PlayerSettings で Write Access を External にする必要があります */
private string dstPath = "/storage/emulated/0/dst.usm";
IEnumerator Start() {
/* .obb が見つかった場合、Application.streamingAssetsPath は obb の中を指すようになります */
string srcPath = Path.Combine(Application.streamingAssetsPath, srcFile);
/* WWWクラスを使って srcPath の中身をロードします */
WWW www = new WWW(srcPath);
Debug.Log("Copy " + srcPath + " to " + dstPath + " is started.");
yield return www;
/* ロードしたバイト配列(www.byte)をdstPathに書き出します */
System.IO.FileStream fileStream = new System.IO.FileStream(dstPath, System.IO.FileMode.Create, System.IO.FileAccess.Write);
fileStream.Write(www.bytes, 0, www.bytes.Length);
fileStream.Close();
Debug.Log("Complete");
}
}
注意
上記で示した再生方法はあくまで一例であり、具体的な実装は未検証です。

ページTOP


Android端末でアプリケーションがバックグラウンドに入ったのに音声が止まらない。

【概要】

iOS端末ではアプリケーションがバックグラウンドに入った場合は音声再生がポーズするが、Android端末の場合は 再生されつづけてしまう。

【対策】

CriWare.CriWareInitializer コンポーネントが誤って破棄されてしまった場合に発生する場合があります。

CriWare.CriWareInitializer::dontDestroyOnLoad プロパティが正しく設定されているかどうかご確認ください。
プロパティがfalseに設定されている場合、シーン終了時に自動的にCriWare.CriWareInitializer が破棄されてしまいます。

CriWare.CriWareInitializer コンポーネントが破棄された状態で音声を再生しつづけた場合、アプリケーションのサスペンドや レジュームを検知できなくなるため、本現象が発生することがあります。
シーンをまたいで音声再生を行う場合は上記プロパティをtrueに設定してください。

ページTOP


Play Asset Deliveryを使用するとCRIWAREのデータファイルにアクセスできない

【概要】

Unity内蔵のPlay Asset Delivery対応機能を使用して、CRIWAREの音声・動画データファイルをAsset Packに内包する場合、 設定によっては通常のStreamingAssetsからの相対パスでファイルにアクセスできなくなることがある。

【対策】

AssetPackの実際の保存場所は、配信モード(install-time/fast-follow/on-demand)やAssetPackの種類(デフォルト/カスタムアセットパック)によって異なります。
CRIWAREのファイルロード関数には実際のファイルパスを渡す必要があるため、状況に合わせたファイルパスをまず取得する必要があります。

カスタムアセットパックを使用する場合、配信モードやパックの種類に関わらず、以下の要領でファイルパスを取得することができます。
// AndroidAssetPacks.coreUnityAssetPacksDownloaded == true の時に
string assetPackPath = AndroidAssetPacks.GetAssetPackPath("<カスタムアセットパック名>");
string criDataPath = System.IO.Path.Combine(assetPackPath, "<アセットパック以下のファイルの相対パス>");
アクセスの方法を統一出来るため、カスタムアセットパックの使用をお勧めします。

カスタムアセットパックを使わず、アセットパックの作成をUnityのデフォルト動作に任せる場合、以下の注意点があります。
StreamingAssetsの内容物はそのサイズと追加アセットの総容量によっては、単独でfast-follow設定のAssetPackに内包される可能性があります。
この場合、上記 GetAssetPackPath 関数に名前「UnityStreamingAssetsPack」を指定することでアセットパックのパスを取得できます。
これ以外の場合はPlay Asset Deliveryを使用しない時とは同じ動作になり、CRIWAREの関数にStreamingAssets以降の相対パスを渡せばデータにアクセスできます。
データサイズの条件が変わるとStreamingAssetsフォルダへのアクセス方法も変わりますので、ご注意ください。

アセットパックの自動作成の条件など、Play Asset Deliveryに関する詳細情報は、Unityマニュアルと、Androidデベロッパー公式サイトをご参照ください。

ページTOP


iOSアプリ起動後に音声再生やムービー再生が進まない

【概要】

アプリケーションを起動後、ADXにより再生している音声が鳴らず、Sofdecによるムービー再生が 進まないという問題が発生することがあります。
特に、アプリケーションインストール後の初回起動時に「通知の許可」などのシステムダイアログを 表示する場合に発生しやすいです。
この問題が発生したあと、サスペンド、レジューム操作を行うと、音声が再生されるようになります。

【対策】

上記のシステムダイアログよりもあとにプラグインの初期化を行うようにしてください。
具体的な対策は以下のようになります。
  • 起動時のシーンとして、スプラッシュスクリーンのみを表示するような空のシーンを配置
  • 上記シーンから通常の起動シーンに遷移し、初期化を行う

iOS 8.0以上でADX音声が再生されないケースがある

【概要】

iOS 8.0以上において、UnityのAPI AudioSettings.OutputSampringRateが
設定されている場合、以下のような不具合症状が発生する事があります。
  • 一切ADX音声が再生されず音が鳴らない。ただし、音声再生処理自体はされている。
  • サスペンド、リジューム操作によりADX音声が再生されるようになる。

【対策】

ADX使用時は上記不具合症状の回避のためAudioSettings.OutputSampringRateの
設定は行わないようにして下さい。

ページTOP


リソースのロードに失敗する (CORS)

【概要】

ADXのACB/AWB、SofdecのUSMファイルのロードで以下のエラーが出て失敗することがあります。
XMLHttpRequest cannot load http://xxx.xxx.xxx/assets/CueSheet.acb.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://yyy.yyy.yyy' is therefore not allowed access.
ブラウザが通信を行う際、同一生成元ポリシーによってWebページを生成したドメイン以外への
HTTPリクエスト(クロスドメインアクセス)は、通常は許可されていません。
ADXもSofdecもブラウザの通信機能を使用してデータの取得を行うためこの制限を受けます。
Amazon S3等、ストレージサーバーとWebサーバーを分けた場合に発生します。

【対策】

リソースデータが置いてあるサーバーに対してCORS設定を行うことでクロスドメインアクセスを実現できます。
Amazon S3ではサーバーの設定ページからCORS設定が行うことができます。

【参考サイト】

CORS(Cross-Origin Resource Sharing)について整理してみた - クラスメソッド株式会社
http://dev.classmethod.jp/etc/about-cors/

ページTOP


リソースをメモリファイルに書き出してロードすると動作がおかしい

【概要】

WWW,UnityWebRequestでリソースファイルを取得、メモリファイルへ書き出しを行い、
ADX/Sofdecから読むと、エラーが発生したり正常に動作しないことがあります。
まずブラウザのデバッグコンソールから見れるネットワークログを開き、
リソースファイルアクセスのレスポンスヘッダを確認してください。
ここに Content-type: text/html がある場合、リソースファイルの破損が起きている可能性があります。
バイナリデータをテキストデータだと判断してしまい、文字コード変換や改行コード変換などが行われるためです。

【対策】

ストレージサーバーにリソースをアップロードする際、
Content-Type (Mime Type) に application/octet-stream を指定します。

ページTOP


ムービーが再生されない (wasm streaming compile failed)

【概要】

アプリケーション起動時(Sofdec初期化時)に以下のエラーが出力されます。
  • wasm streaming compile failed: TypeError: Failed to fetch
これはWebAssemblyバイナリのストリームコンパイルを行うとき、wasmファイルのMIME Typeが正しく設定されていないときに発生します。

【対策】

WASMファイルに対して、適切な MIME Type 設定を行います。
application/wasm wasm

ページTOP