📂
Unity ScriptedImporterで拡張子が被ったときの対策
ScriptedImporterを使うと、Unityで対応してない種類の拡張子もUnity読み込み時に別のアセットに変換してUnityで読み込むことができます。
私が公開している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
{
//
}
もしScriptedImporterの拡張子が被ってエラーになったときは使ってみてください。
Discussion