SpringBone Runtime
VRM10Viewerを参照してください。
v0.127
import 時の Springbone Runtime 切り替えについて
clss Vrm10Importer {
public Vrm10Importer(
Vrm10Data vrm,
IReadOnlyDictionary<SubAssetKey, UnityEngine.Object> externalObjectMap = null,
ITextureDeserializer textureDeserializer = null,
IMaterialDescriptorGenerator materialGenerator = null,
bool useControlRig = false,
ImporterContextSettings settings = null,
IVrm10SpringBoneRuntime springboneRuntime = null // 👈
)
}
この引き数により SpringBone の Runtime をカスタマイズできます。
new Vrm10FastSpringboneRuntime
(default)new Vrm10FastSpringboneRuntimeStandalone
を渡してください。
null
の場合は Vrm10FastSpringboneRuntime
になります。
v0.127
scene 配置時の Springbone Runtime 切り替えについて
Vrm10FastSpringboneRuntimeProvider
Vrm10FastSpringboneRuntimeStandaloneProvider
をアッタチしてください。
v0.128
editor の scene play 時は Standalone 版がデフォルトになります
Vrm10FastSpringboneRuntimeStandalone
になります。
Vrm10FastSpringboneRuntime
vrm-1.0 default の SpringBone Runtime です。
特徴
- Unity job system で実装されている
- すべての Vrm の SpringBone を Singleton でまとめて処理する
- 非play時に動作できません。DontDestroyOnLoad
FastSpringBoneService(シングルトン)について
FastSpringBone が実行されると、FastSpringBone Service
GameObject が DontDestroyOnLoad
で生成されます。
[DefaultExecutionOrder(11010)]
public sealed class FastSpringBoneService : MonoBehaviour
{
public static FastSpringBoneService Instance
{
get {
DontDestroyOnLoad(gameObject);
}
}
private void LateUpdate()
}
これは全 VRM の FastSpringBone を集め、バッファの構築や FastSpringBone の実行タイミングの制御などを行う GameObject です。
注記
明示的に破棄を行いたい場合は FastSpringBoneService.Free
を呼んでください。
Vrm10FastSpringboneRuntimeStandalone
Vrm10FastSpringboneRuntime と同じ job を使用します。シングルトンでは無いバージョンです。
- UniVRM タイムライン…プレイモードとエデットモードで挙動が異なる · Issue #1971 · vrm-c/UniVRM · GitHub
- [1.0] FastSpringBone Service does not disposed when I change the code while playing in editor · Issue #1567 · vrm-c/UniVRM · GitHub
特徴
- Unity job system で実装されている
- vrm-1.0 の update 処理の 6 番目に実行される
public class Vrm10Runtime : IDisposable
{
public void Process()
{
// 1. Update From VrmAnimation
// 2. Control Rig
// 3. Constraints
// 4. Gaze control
// 5. Apply Expression
// 6. SpringBone
SpringBone.Process(); // 👈
}
}
Runtime の操作
v0.128.0
Runtime を取得する
Vrm10Instance から取得してください。
Vrm10Instance vrm;
IVrm10SpringBoneRuntime springboneRuntime = vrm.Runtime.Springbone;