using UnityEngine; using VRM.FastSpringBones.Components; using VRM.FastSpringBones.Registries; namespace VRM { /// /// Scene 上に単一で存在する、FastSpringBone の ServiceLocator 兼 EntryPoint /// public class FastSpringBoneService : MonoBehaviour { public RootBoneRegistry RootBoneRegistry { get; private set; } public TransformRegistry TransformRegistry { get; private set; } public ColliderGroupRegistry ColliderGroupRegistry { get; private set; } public FastSpringBoneScheduler FastSpringBoneScheduler { get; private set; } private static FastSpringBoneService _instance; public static FastSpringBoneService Instance { get { if (!_instance) { var gameObject = new GameObject("FastSpringBone Service"); DontDestroyOnLoad(gameObject); _instance = gameObject.AddComponent(); } return _instance; } } /// /// 専有しているインスタンスを破棄する /// public static void Free() { Destroy(_instance.gameObject); _instance = null; } private void Awake() { RootBoneRegistry = new RootBoneRegistry(); TransformRegistry = new TransformRegistry(); ColliderGroupRegistry = new ColliderGroupRegistry(); FastSpringBoneScheduler = gameObject.AddComponent(); FastSpringBoneScheduler.Initialize( RootBoneRegistry, TransformRegistry, ColliderGroupRegistry); } } }