📂

Unity ScriptedImporterで拡張子が被ったときの対策

2024/11/22に公開

ScriptedImporterを使うと、Unityで対応してない種類の拡張子もUnity読み込み時に別のアセットに変換してUnityで読み込むことができます。

https://docs.unity3d.com/ScriptReference/AssetImporters.ScriptedImporter.html

私が公開しているOnnxRuntime-Unityライブラリは.onnxと.ort、2種類の拡張子の機械学習モデルを読み込むことができますが、.onnxはUnity公式の機械学習推論ライブラリでもあるSentisでも対応しており、OnnxRuntimeとSentisが同時にインストールされているときに、onnxファイルを読み込もうとすると、エラーが出てしまいます。

今までは以下の様に、Sentisがインストールされているときだけ、.onnxをOnnxRuntimeライブラリ側では認識しないようにしていました。

#if ORT_UNITY_SENTIS_ENABLED
// Sentisがインストールされている時はこちら
[ScriptedImporter(1, "ort")]
#else
// Sentisがインストールされていない時は,.onnxも認識する
[ScriptedImporter(1, new[] { "ort", "onnx" })]
#endif
public class OrtImporter : ScriptedImporter
{
 // 
}

しかし、このissueで教えてもらったのですが、ScriptedImporterにはoverrideExtsというオプションがあり、以下の様に指定することで、ユーザーが自分でImporterを選べるようです。

// .ortは全部変換する
// .onnxはユーザーがどのimporterを使うか選べる
[ScriptedImporter(1, new[] { "ort" }, new[] { "onnx" })]
public class OrtImporter : ScriptedImporter
{
 // 
}

Importer Selection

もしScriptedImporterの拡張子が被ってエラーになったときは使ってみてください。

Discussion