おもちゃラボ

Unityで遊びを作ってます

【Unity】OpenCVSharpがusingできない場合の対処法

MirrorやMLAgentsなど、OpenCV+Unity外のパッケージからOpenCV+Unityを参照する場合、C#スクリプトの先頭に

using OpenCvSharp;

と書くと

The type or namespace name OpenCvSharp could not be found
とか
型または名前空間の名前OpenCvSharpが見つかりませんでした

というエラーが出ることがあります。

エラーの原因

これはC#スクリプトを置いているパッケージにAssembly Definitionファイルがあり、ビルドの範囲がパッケージ内に限定されていることが原因です。

対応方法としては、Assembly Definitionファイルのビルド対象にOpenCV+UnityのAssembly Definitionを作成して追加します。


具体的な手順

まずはOpneCV+UnityパッケージのAssembly Definitionファイルを作成します。OpenCV+Unity/Assets/Scriptsフォルダを開き、プロジェクトウインドウで右クリックしてCreate→Assembly Definitionを選択してください。作成したAssembly Definitionの名前はcvAssemblyにしておきます(任意の名前でOK)

作成したCvAssemblyをクリックしてインスペクタから「Allow unsafe Code」にチェックを入れます。

次に、エラーが出るスクリプトを置いたフォルダ内にあるAssembly Definitionをクリックして、Assembly Definition Referencesの+ボタンをクリックして、先ほど作成したCvAssemblyを指定してください。

外部パッケージのAssembly DefinitionにOpenCV+UnityのAssembly Definitionを追加できました。これで外部パッケージからOpenCV+Unityが見えるようになるので、using OpenCvSharpを書いてもエラーが出なくなるはずです!