mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-03-22 10:25:47 -05:00
40 lines
1.5 KiB
Markdown
40 lines
1.5 KiB
Markdown
# ScriptedImporter の実装
|
|
|
|
`v0.68.0` 以降 の `glb/gltf editor importer` と `VRM-1.0 editor importer` の実装で使用している [ScriptedImporter](https://docs.unity3d.com/ja/2019.4/ScriptReference/Experimental.AssetImporters.ScriptedImporter.html) に関して。
|
|
|
|
> `VRM-1.0` の実装と拡張子がぶつかってしまうので `VRM-0.x` への `ScriptedImporter` 実装はしません
|
|
|
|
## ScriptedImporter 採用の利点
|
|
|
|
### Texture の Asset化 が楽
|
|
|
|
`AssetPostprocessor` だと普通の方法では実装できない Texture のバイト列を出力して Asset 化して、
|
|
これを参照する Material をアセット化するということが、
|
|
`ScriptedImporter.GetExternalObjectMap` により無理をせずに実装できます。
|
|
|
|
> UniVRM では抜け道として `EditorApplication.delayCall` を使用しています。
|
|
|
|
### Import 設定を作れる
|
|
|
|
`ScriptedImporter` を継承したクラスの `public member` や `[SerializeField]` に情報を保存できます。
|
|
|
|
```csharp
|
|
// 例
|
|
[ScriptedImporter(1, "cube")]
|
|
public class CubeImporter : ScriptedImporter
|
|
{
|
|
public float m_Scale = 1; // これを Asset の Inspector で変更して Apply すると、新しい設定で再importできる
|
|
|
|
// 省略
|
|
}
|
|
```
|
|
|
|
### ForceText 時に import が低速化するのを回避できる
|
|
|
|
`ScriptedImporter` の SubAsset にすることで、 `mesh` などがテキスト(yaml)で Asset 化されることを回避できます。
|
|
巨大なアセットで差が出ます。
|
|
|
|
## ScriptedImporter 実装
|
|
|
|
TODO: ExternalObjectMap の扱い
|