using System.Threading.Tasks; using UniGLTF; using UniGLTF.SpringBoneJobs.Blittables; using UnityEngine; namespace VRM { /// /// デフォルトの VRMSPringBone 実装です。 /// /// VRMSpringBone.m_updateType = LateUpdate /// /// により、各VRMSpringBoneが自力で LateUpdate に動作します。 /// public class Vrm0XSpringBoneDefaultRuntime : IVrm0XSpringBoneRuntime { GameObject m_vrm; public async Task InitializeAsync(GameObject vrm, IAwaitCaller awaitCaller) { m_vrm = vrm; foreach (VRMSpringBone sb in vrm.GetComponentsInChildren()) { sb.m_updateType = VRMSpringBone.SpringBoneUpdateType.LateUpdate; } await awaitCaller.NextFrame(); } public void ReconstructSpringBone() { foreach (VRMSpringBone sb in m_vrm.GetComponentsInChildren()) { sb.Setup(); } } public void RestoreInitialTransform() { foreach (VRMSpringBone sb in m_vrm.GetComponentsInChildren()) { sb.ReinitializeRotation(); } } public void SetJointLevel(Transform joint, BlittableJointMutable jointSettings) { // no impl } public void SetModelLevel(Transform modelRoot, BlittableModelLevel modelSettings) { foreach (VRMSpringBone sb in m_vrm.GetComponentsInChildren()) { sb.SetModelLevel(modelSettings); sb.m_updateType = modelSettings.StopSpringBoneWriteback ? VRMSpringBone.SpringBoneUpdateType.Manual : VRMSpringBone.SpringBoneUpdateType.LateUpdate; } } } }