UniVRM/docs/vrm0/0_87_runtime_import.md
2021-10-25 14:48:24 +09:00

40 lines
1.4 KiB
Markdown

# RuntimeImport(0.87) 非同期ロード
## awaitCaller 引き数
```csharp
public virtual async Task<RuntimeGltfInstance> LoadAsync(IAwaitCaller awaitCaller = null, ...)
```
awaitCaller によりロード時の挙動をカスタマイズできます。
```{literalinclude} ../../Assets/VRMShaders/GLTF/IO/Runtime/AwaitCaller/IAwaitCaller.cs
:language: csharp
:linenos:
```
* NextFrame: 処理を中断して次のフレームで再開します。ロード処理が長い場合に長時間アプリケーションが固まることを防ぎます
* Run: UnityEngine.Object にアクセスしない処理を別スレッドで実行します。タスクが終了したら await で Unity Script スレッドで続きを実行します。
## ImmediateCaller
デフォルトでは、`ImmediateCaller` が使われます。
`ImmediateCaller` タスクを即時に実行するので、同期実行となります。
* Play(Editor Play, build), Editor(not play), UnitTest でデッドロックしないための実装です。
```{literalinclude} ../../Assets/VRMShaders/GLTF/IO/Runtime/AwaitCaller/ImmediateCaller.cs
:language: csharp
:linenos:
```
## RuntimeOnlyAwaitCaller
* Play(Editor Play, build) 時に非同期実行する実装です
* `VRM10_Samples/VRM10Viewer` に使用例があります。
```{literalinclude} ../../Assets/VRMShaders/GLTF/IO/Runtime/AwaitCaller/RuntimeOnlyAwaitCaller.cs
:language: csharp
:linenos:
```