diff --git a/Assets/UniGLTF/Runtime/Extensions/TransformExtensions.cs b/Assets/UniGLTF/Runtime/Extensions/TransformExtensions.cs new file mode 100644 index 000000000..126138457 --- /dev/null +++ b/Assets/UniGLTF/Runtime/Extensions/TransformExtensions.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +namespace UniGLTF +{ + public static class TransformExtensions + { + public static float UniformedLossyScale(this Transform transform) + { + var s = transform.lossyScale; + return AbsoluteMaxValue(s); + } + + public static float AbsoluteMaxValue(in Vector3 s) + { + var x = Mathf.Abs(s.x); + var y = Mathf.Abs(s.y); + var z = Mathf.Abs(s.z); + return Mathf.Max(Mathf.Max(x, y), z); + } + } +} \ No newline at end of file diff --git a/Assets/VRM/Runtime/Extensions/TransformExtensions.cs.meta b/Assets/UniGLTF/Runtime/Extensions/TransformExtensions.cs.meta similarity index 100% rename from Assets/VRM/Runtime/Extensions/TransformExtensions.cs.meta rename to Assets/UniGLTF/Runtime/Extensions/TransformExtensions.cs.meta diff --git a/Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableExternalData.cs b/Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableExternalData.cs deleted file mode 100644 index 17ba54e07..000000000 --- a/Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableExternalData.cs +++ /dev/null @@ -1,17 +0,0 @@ -using UnityEngine; - -namespace UniGLTF.SpringBoneJobs.Blittables -{ - /// - /// 外力等の毎フレーム更新されうる外部から与えられる情報 - /// - public struct BlittableExternalData - { - public Vector3 ExternalForce; - - /// - /// if false, spring bone is paused. - /// - public bool IsSpringBoneEnabled; - } -} \ No newline at end of file diff --git a/Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableModelLevel.cs b/Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableModelLevel.cs new file mode 100644 index 000000000..f86daccc2 --- /dev/null +++ b/Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableModelLevel.cs @@ -0,0 +1,23 @@ +using UnityEngine; + +namespace UniGLTF.SpringBoneJobs.Blittables +{ + public struct BlittableModelLevel + { + /// + /// 風など。 + /// + public Vector3 ExternalForce; + + /// + /// 処理結果の Transform への書き戻しを停止する。 + /// + public bool StopSpringBoneWriteback; + + /// + /// スケール値に連動して SpringBone のパラメータを自動調整する。 + /// (見た目の角速度が同じになるようにする) + /// + public bool SupportsScalingAtRuntime; + } +} \ No newline at end of file diff --git a/Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableExternalData.cs.meta b/Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableModelLevel.cs.meta similarity index 100% rename from Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableExternalData.cs.meta rename to Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableModelLevel.cs.meta diff --git a/Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableSpring.cs b/Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableSpring.cs index b1cdfa14c..c4de2b291 100644 --- a/Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableSpring.cs +++ b/Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableSpring.cs @@ -13,6 +13,6 @@ namespace UniGLTF.SpringBoneJobs.Blittables public BlittableSpan logicSpan; public int centerTransformIndex; public int transformIndexOffset; - public unsafe BlittableExternalData* ExternalData; + public int modelIndex; } } \ No newline at end of file diff --git a/Assets/UniGLTF/Runtime/SpringBoneJobs/FastSpringBoneBufferCombiner.cs b/Assets/UniGLTF/Runtime/SpringBoneJobs/FastSpringBoneBufferCombiner.cs index 4b0e78d5d..324ea8d7e 100644 --- a/Assets/UniGLTF/Runtime/SpringBoneJobs/FastSpringBoneBufferCombiner.cs +++ b/Assets/UniGLTF/Runtime/SpringBoneJobs/FastSpringBoneBufferCombiner.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using Unity.Jobs; using UnityEngine.Profiling; using UniGLTF.SpringBoneJobs.InputPorts; +using UnityEngine; namespace UniGLTF.SpringBoneJobs { diff --git a/Assets/UniGLTF/Runtime/SpringBoneJobs/FastSpringBoneConbinedBuffer.cs b/Assets/UniGLTF/Runtime/SpringBoneJobs/FastSpringBoneConbinedBuffer.cs index 284eada61..a87f9b6fd 100644 --- a/Assets/UniGLTF/Runtime/SpringBoneJobs/FastSpringBoneConbinedBuffer.cs +++ b/Assets/UniGLTF/Runtime/SpringBoneJobs/FastSpringBoneConbinedBuffer.cs @@ -20,48 +20,58 @@ namespace UniGLTF.SpringBoneJobs /// public class FastSpringBoneCombinedBuffer : IDisposable { - // 長さと index 同じ + // Joint Level private NativeArray _logics; private NativeArray _joints; private NativeArray _prevTails; private NativeArray _currentTails; private NativeArray _nextTails; - + // Spring Level private NativeArray _springs; + // Moodel Level + private NativeArray _models; + // その他 private NativeArray _colliders; - private NativeArray _transforms; private TransformAccessArray _transformAccessArray; + // accessor: Joint Level public NativeArray Logics => _logics; public NativeArray Joints => _joints; public NativeArray PrevTails => _prevTails; public NativeArray CurrentTails => _currentTails; public NativeArray NextTails => _nextTails; - + // accessor: Spring Level public NativeArray Springs => _springs; - + // accessor: Model LEvel + public NativeArray Models => _models; + // accessor: Other public NativeArray Colliders => _colliders; - public NativeArray Transforms => _transforms; public TransformAccessArray TransformAccessArray => _transformAccessArray; - // 構築情報 private FastSpringBoneBuffer[] _batchedBuffers; private int[] _batchedBufferLogicSizes; + private Dictionary _modelMap = new(); + private Dictionary _jointMap = new(); - private FastSpringBoneCombinedBuffer(int logicsCount, int springsCount, int collidersCount, int transformsCount, + private FastSpringBoneCombinedBuffer(int logicsCount, int springsCount, int modelCount, int collidersCount, int transformsCount, FastSpringBoneBuffer[] batchedBuffers, int[] batchedBufferLogicSizes ) { + // joint level _logics = new NativeArray(logicsCount, Allocator.Persistent); _joints = new NativeArray(logicsCount, Allocator.Persistent); _prevTails = new NativeArray(logicsCount, Allocator.Persistent); _currentTails = new NativeArray(logicsCount, Allocator.Persistent); _nextTails = new NativeArray(logicsCount, Allocator.Persistent); + // spring level _springs = new NativeArray(springsCount, Allocator.Persistent); + // model level + _models = new NativeArray(modelCount, Allocator.Persistent); + // others _colliders = new NativeArray(collidersCount, Allocator.Persistent); _transforms = new NativeArray(transformsCount, Allocator.Persistent); _batchedBuffers = batchedBuffers; @@ -93,8 +103,8 @@ namespace UniGLTF.SpringBoneJobs // バッファの構築 Profiler.BeginSample("FastSpringBone.ReconstructBuffers.CreateBuffers"); - combined = new FastSpringBoneCombinedBuffer(logicsCount, springsCount, collidersCount, transformsCount, - batchedBuffers, batchedBufferLogicSizes); + combined = new FastSpringBoneCombinedBuffer(logicsCount, springsCount, _buffers.Count, + collidersCount, transformsCount, batchedBuffers, batchedBufferLogicSizes); Profiler.EndSample(); return combined.Batching(handle); @@ -110,6 +120,14 @@ namespace UniGLTF.SpringBoneJobs for (var i = 0; i < _batchedBuffers.Length; i++) { var buffer = _batchedBuffers[i]; + // 逆引き + _modelMap.Add(buffer.Model, i); + + for (var j = 0; j < _batchedBufferLogicSizes[i]; ++j) + { + var head = buffer.Logics[j].headTransformIndex; + _jointMap.Add(buffer.Transforms[head], logicsOffset + j); + } // バッファの読み込みをスケジュール handle = new LoadTransformsJob @@ -121,6 +139,7 @@ namespace UniGLTF.SpringBoneJobs handle = new LoadSpringsJob { + ModelIndex = i, SrcSprings = buffer.Springs, DestSprings = new NativeSlice(_springs, springsOffset, buffer.Springs.Length), CollidersOffset = collidersOffset, @@ -173,12 +192,17 @@ namespace UniGLTF.SpringBoneJobs public void Dispose() { + // joint if (_logics.IsCreated) _logics.Dispose(); if (_joints.IsCreated) _joints.Dispose(); if (_prevTails.IsCreated) _prevTails.Dispose(); if (_currentTails.IsCreated) _currentTails.Dispose(); if (_nextTails.IsCreated) _nextTails.Dispose(); + // spring if (_springs.IsCreated) _springs.Dispose(); + // model + if (_models.IsCreated) _models.Dispose(); + // other if (_colliders.IsCreated) _colliders.Dispose(); if (_transforms.IsCreated) _transforms.Dispose(); if (_transformAccessArray.isCreated) _transformAccessArray.Dispose(); @@ -211,6 +235,22 @@ namespace UniGLTF.SpringBoneJobs _nextTails = tmp; } + public void SetJointLevel(Transform joint, BlittableJointMutable jointSettings) + { + if (_jointMap.TryGetValue(joint, out var jointIndex)) + { + _joints[jointIndex] = jointSettings; + } + } + + public void SetModelLevel(Transform model, BlittableModelLevel modelSetting) + { + if (_modelMap.TryGetValue(model, out var modelIndex)) + { + _models[modelIndex] = modelSetting; + } + } + #if ENABLE_SPRINGBONE_BURST [BurstCompile] #endif @@ -236,6 +276,7 @@ namespace UniGLTF.SpringBoneJobs [ReadOnly] public NativeArray SrcSprings; [WriteOnly] public NativeSlice DestSprings; + public int ModelIndex; public int CollidersOffset; public int LogicsOffset; public int TransformOffset; @@ -243,6 +284,7 @@ namespace UniGLTF.SpringBoneJobs public void Execute(int index) { var spring = SrcSprings[index]; + spring.modelIndex = ModelIndex; spring.colliderSpan.startIndex += CollidersOffset; spring.logicSpan.startIndex += LogicsOffset; spring.transformIndexOffset = TransformOffset; diff --git a/Assets/UniGLTF/Runtime/SpringBoneJobs/FastSpringBoneScheduler.cs b/Assets/UniGLTF/Runtime/SpringBoneJobs/FastSpringBoneScheduler.cs index 825707b48..9a27260d9 100644 --- a/Assets/UniGLTF/Runtime/SpringBoneJobs/FastSpringBoneScheduler.cs +++ b/Assets/UniGLTF/Runtime/SpringBoneJobs/FastSpringBoneScheduler.cs @@ -43,6 +43,7 @@ namespace UniGLTF.SpringBoneJobs PrevTail = combined.PrevTails, NextTail = combined.NextTails, Springs = combined.Springs, + Models = combined.Models, Colliders = combined.Colliders, Transforms = combined.Transforms, DeltaTime = deltaTime, diff --git a/Assets/UniGLTF/Runtime/SpringBoneJobs/InputPorts/FastSpringBoneBuffer.cs b/Assets/UniGLTF/Runtime/SpringBoneJobs/InputPorts/FastSpringBoneBuffer.cs index 40493b294..fcd2b61f5 100644 --- a/Assets/UniGLTF/Runtime/SpringBoneJobs/InputPorts/FastSpringBoneBuffer.cs +++ b/Assets/UniGLTF/Runtime/SpringBoneJobs/InputPorts/FastSpringBoneBuffer.cs @@ -2,7 +2,6 @@ using System; using System.Collections.Generic; using System.Linq; using Unity.Collections; -using Unity.Collections.LowLevel.Unsafe; using UnityEngine; using UnityEngine.Profiling; using UniGLTF.SpringBoneJobs.Blittables; @@ -14,6 +13,10 @@ namespace UniGLTF.SpringBoneJobs.InputPorts /// public class FastSpringBoneBuffer : IDisposable { + /// + /// model root + /// + public Transform Model { get; } // NOTE: これらはFastSpringBoneBufferCombinerによってバッチングされる public NativeArray Springs { get; } public NativeArray Joints { get; } @@ -23,34 +26,6 @@ namespace UniGLTF.SpringBoneJobs.InputPorts public Transform[] Transforms { get; } public bool IsDisposed { get; private set; } - // NOTE: これは更新頻度が高くバッチングが難しいため、ランダムアクセスを許容してメモリへ直接アクセスする - // 生のヒープ領域は扱いにくいので長さ1のNativeArrayで代用 - private NativeArray _externalData; - public Vector3 ExternalForce - { - get => _externalData[0].ExternalForce; - set - { - _externalData[0] = new BlittableExternalData - { - ExternalForce = value, - IsSpringBoneEnabled = _externalData[0].IsSpringBoneEnabled, - }; - } - } - public bool IsSpringBoneEnabled - { - get => _externalData[0].IsSpringBoneEnabled; - set - { - _externalData[0] = new BlittableExternalData - { - ExternalForce = _externalData[0].ExternalForce, - IsSpringBoneEnabled = value, - }; - } - } - /// /// Joint, Collider, Center の Transform のリスト /// - 重複を除去 @@ -79,18 +54,13 @@ namespace UniGLTF.SpringBoneJobs.InputPorts return Transforms; } - public unsafe FastSpringBoneBuffer(FastSpringBoneSpring[] springs) + public FastSpringBoneBuffer(Transform model, FastSpringBoneSpring[] springs) { + Model = model; + Profiler.BeginSample("FastSpringBone.ConstructBuffers.BufferBuilder"); Transforms = MakeFlattenTransformList(springs); - _externalData = new NativeArray(1, Allocator.Persistent); - _externalData[0] = new BlittableExternalData - { - ExternalForce = Vector3.zero, - IsSpringBoneEnabled = true, - }; - var externalDataPtr = (BlittableExternalData*)_externalData.GetUnsafePtr(); List blittableSprings = new(); List blittableJoints = new(); List blittableColliders = new(); @@ -110,7 +80,6 @@ namespace UniGLTF.SpringBoneJobs.InputPorts count = spring.joints.Length - 1, }, centerTransformIndex = Array.IndexOf(Transforms, spring.center), - ExternalData = externalDataPtr, }; blittableSprings.Add(blittableSpring); @@ -182,7 +151,6 @@ namespace UniGLTF.SpringBoneJobs.InputPorts BlittableTransforms.Dispose(); Colliders.Dispose(); Logics.Dispose(); - _externalData.Dispose(); } } } \ No newline at end of file diff --git a/Assets/UniGLTF/Runtime/SpringBoneJobs/SpringBoneJobs.asmdef b/Assets/UniGLTF/Runtime/SpringBoneJobs/SpringBoneJobs.asmdef index 2954f7f79..29d33d7c1 100644 --- a/Assets/UniGLTF/Runtime/SpringBoneJobs/SpringBoneJobs.asmdef +++ b/Assets/UniGLTF/Runtime/SpringBoneJobs/SpringBoneJobs.asmdef @@ -1,10 +1,12 @@ { "name": "SpringBoneJobs", "rootNamespace": "", - "references": [], + "references": [ + "GUID:8d76e605759c3f64a957d63ef96ada7c" + ], "includePlatforms": [], "excludePlatforms": [], - "allowUnsafeCode": true, + "allowUnsafeCode": false, "overrideReferences": false, "precompiledReferences": [], "autoReferenced": true, diff --git a/Assets/UniGLTF/Runtime/SpringBoneJobs/UpdateFastSpringBoneJob.cs b/Assets/UniGLTF/Runtime/SpringBoneJobs/UpdateFastSpringBoneJob.cs index c6d0e2f9a..fc1a8983a 100644 --- a/Assets/UniGLTF/Runtime/SpringBoneJobs/UpdateFastSpringBoneJob.cs +++ b/Assets/UniGLTF/Runtime/SpringBoneJobs/UpdateFastSpringBoneJob.cs @@ -12,33 +12,44 @@ namespace UniGLTF.SpringBoneJobs #if ENABLE_SPRINGBONE_BURST [BurstCompile] #endif + /// + /// データの粒度 + /// - Joint Level: spring の節。Transform. stiffness など + /// - Spring Level: spring の房。root から末端まで。この房 level で並列処理する + /// - Model Level: 一人分。複数の房 + /// - System Level: すべての model。delta time とか + /// public struct UpdateFastSpringBoneJob : IJobParallelFor { + // Joint Level // すべての spring の joint を平坦に連結した配列 // Joints, Logics, PrevTail, CurrentTail, NextTail は同じ index [ReadOnly] public NativeArray Joints; [ReadOnly] public NativeArray Logics; [ReadOnly] public NativeArray PrevTail; [ReadOnly] public NativeArray CurrentTail; - // ランダムアクセス + // 処理後の tail 位置(ランダムアクセス) [NativeDisableParallelForRestriction] public NativeArray NextTail; - + // Spring Level [ReadOnly] public NativeArray Springs; + // Model Level + [ReadOnly] public NativeArray Models; [ReadOnly] public NativeArray Colliders; - - // FastSpringBoneBuffer.Transforms を連結したもの - // ランダムアクセス + // FastSpringBoneBuffer.Transforms を連結したもの(ランダムアクセス) [NativeDisableParallelForRestriction] public NativeArray Transforms; + // System Level public float DeltaTime; - public unsafe void Execute(int index) + /// 房のindex + public void Execute(int index) { var spring = Springs[index]; var transformIndexOffset = spring.transformIndexOffset; var colliderSpan = spring.colliderSpan; var logicSpan = spring.logicSpan; + var model = Models[spring.modelIndex]; for (var logicIndex = logicSpan.startIndex; logicIndex < logicSpan.startIndex + logicSpan.count; ++logicIndex) { @@ -70,13 +81,16 @@ namespace UniGLTF.SpringBoneJobs var parentRotation = parentTransform?.rotation ?? Quaternion.identity; + // scaling 対応 + var scalingFactor = model.SupportsScalingAtRuntime ? TransformExtensions.AbsoluteMaxValue(headTransform.localToWorldMatrix.lossyScale) : 1.0f; + // verlet積分で次の位置を計算 - var external = (joint.gravityDir * joint.gravityPower + spring.ExternalData->ExternalForce) * DeltaTime; + var external = (joint.gravityDir * joint.gravityPower + model.ExternalForce) * DeltaTime; var nextTail = currentTail + (currentTail - prevTail) * (1.0f - joint.dragForce) // 前フレームの移動を継続する(減衰もあるよ) + parentRotation * logic.localRotation * logic.boneAxis * - joint.stiffnessForce * DeltaTime // 親の回転による子ボーンの移動目標 - + external; // 外力による移動量 + joint.stiffnessForce * DeltaTime * scalingFactor // 親の回転による子ボーンの移動目標 + + external * scalingFactor; // 外力による移動量 // 長さをboneLengthに強制 nextTail = headTransform.position + (nextTail - headTransform.position).normalized * logic.length; @@ -153,7 +167,7 @@ namespace UniGLTF.SpringBoneJobs headTransform.localRotation = headTransform.rotation; } - if (spring.ExternalData->IsSpringBoneEnabled) + if (!model.StopSpringBoneWriteback) { // SpringBone の結果を Transform に反映する Transforms[logic.headTransformIndex + transformIndexOffset] = headTransform; diff --git a/Assets/VRM/Runtime/Extensions/TransformExtensions.cs b/Assets/VRM/Runtime/Extensions/TransformExtensions.cs deleted file mode 100644 index 3959fbd8c..000000000 --- a/Assets/VRM/Runtime/Extensions/TransformExtensions.cs +++ /dev/null @@ -1,38 +0,0 @@ -using UnityEngine; - -namespace VRM -{ - public static class TransformExtensions - { - public static float UniformedLossyScale(this Transform transform) - { - // Mathf.Max(a, b, c) は GC どうなんだろう - var s = transform.lossyScale; - var x = Mathf.Abs(s.x); - var y = Mathf.Abs(s.y); - var z = Mathf.Abs(s.z); - if (x < y) - { - if (y < z) - { - return z; - } - else - { - return y; - } - } - else - { - if (x < z) - { - return z; - } - else - { - return x; - } - } - } - } -} \ No newline at end of file diff --git a/Assets/VRM/Runtime/SpringBone/Jobs/FastSpringBoneReplacer.cs b/Assets/VRM/Runtime/SpringBone/Jobs/FastSpringBoneReplacer.cs index e7c32945b..5feed60de 100644 --- a/Assets/VRM/Runtime/SpringBone/Jobs/FastSpringBoneReplacer.cs +++ b/Assets/VRM/Runtime/SpringBone/Jobs/FastSpringBoneReplacer.cs @@ -79,7 +79,7 @@ namespace VRM.SpringBoneJobs springs[i] = spring; } - return new FastSpringBoneBuffer(springs); + return new FastSpringBoneBuffer(root.transform, springs); } static void Traverse(List joints, VRMSpringBone spring, Transform joint) diff --git a/Assets/VRM/Runtime/SpringBone/Logic/SphereCollider.cs b/Assets/VRM/Runtime/SpringBone/Logic/SphereCollider.cs index ded97a744..23af6b60d 100644 --- a/Assets/VRM/Runtime/SpringBone/Logic/SphereCollider.cs +++ b/Assets/VRM/Runtime/SpringBone/Logic/SphereCollider.cs @@ -1,3 +1,4 @@ +using UniGLTF; using UnityEngine; namespace VRM.SpringBone diff --git a/Assets/VRM/Runtime/SpringBone/Logic/SpringBoneJointInit.cs b/Assets/VRM/Runtime/SpringBone/Logic/SpringBoneJointInit.cs index 762caea0a..2ab4865f8 100644 --- a/Assets/VRM/Runtime/SpringBone/Logic/SpringBoneJointInit.cs +++ b/Assets/VRM/Runtime/SpringBone/Logic/SpringBoneJointInit.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using UniGLTF; using UnityEngine; namespace VRM.SpringBone diff --git a/Assets/VRM/Runtime/SpringBone/Logic/SpringBoneSystem.cs b/Assets/VRM/Runtime/SpringBone/Logic/SpringBoneSystem.cs index af21306e6..a53f1baf1 100644 --- a/Assets/VRM/Runtime/SpringBone/Logic/SpringBoneSystem.cs +++ b/Assets/VRM/Runtime/SpringBone/Logic/SpringBoneSystem.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using UniGLTF; using UnityEngine; namespace VRM.SpringBone diff --git a/Assets/VRM10/Editor/Components/SpringBone/VRM10SpringBoneJointEditor.cs b/Assets/VRM10/Editor/Components/SpringBone/VRM10SpringBoneJointEditor.cs index 7e5ef5aba..89d5f7277 100644 --- a/Assets/VRM10/Editor/Components/SpringBone/VRM10SpringBoneJointEditor.cs +++ b/Assets/VRM10/Editor/Components/SpringBone/VRM10SpringBoneJointEditor.cs @@ -74,10 +74,9 @@ namespace UniVRM10 { if (Application.isPlaying) { - // UniGLTF.UniGLTFLogger.Log("invaliate"); - if(m_root!=null) + if (m_root != null) { - m_root.Runtime.SpringBone.ReconstructSpringBone(); + m_root.Runtime.SpringBone.SetJointLevel(m_target.transform, m_target.Blittable); } } } diff --git a/Assets/VRM10/Editor/VRM10.Editor.asmdef b/Assets/VRM10/Editor/VRM10.Editor.asmdef index ad3c9fdc3..2e12a2512 100644 --- a/Assets/VRM10/Editor/VRM10.Editor.asmdef +++ b/Assets/VRM10/Editor/VRM10.Editor.asmdef @@ -6,10 +6,9 @@ "GUID:2ef84b520212e174a94668c7a0862d3b", "GUID:5f875fdc81c40184c8333b9d63c6ddd5", "GUID:8d76e605759c3f64a957d63ef96ada7c", - "GUID:da3e51d19d51a544fa14d43fee843098", - "GUID:7da8a75dcade2144aab699032d7d7987", "GUID:b7aa47b240b57de44a4b2021c143c9bf", - "GUID:1cd941934d098654fa21a13f28346412" + "GUID:1cd941934d098654fa21a13f28346412", + "GUID:3e5d614bc16b50d41bd94c8d7444ca46" ], "includePlatforms": [ "Editor" diff --git a/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneJoint.cs b/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneJoint.cs index 4583e9fdb..a0e751a84 100644 --- a/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneJoint.cs +++ b/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneJoint.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using UniGLTF; +using UniGLTF.SpringBoneJobs.Blittables; using UnityEngine; @@ -28,6 +29,15 @@ namespace UniVRM10 [SerializeField] public bool m_drawCollider = false; + public BlittableJointMutable Blittable => new BlittableJointMutable + { + stiffnessForce = m_stiffnessForce, + dragForce = m_dragForce, + gravityDir = m_gravityDir, + gravityPower = m_dragForce, + radius = m_jointRadius, + }; + void AddJointRecursive(Transform t, VRM10SpringBoneJoint src) { var joint = t.gameObject.GetOrAddComponent(); diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/FastSpringBoneBufferFactory.cs b/Assets/VRM10/Runtime/Components/Vrm10Runtime/FastSpringBoneBufferFactory.cs index 7d7033f4b..a6a03f23c 100644 --- a/Assets/VRM10/Runtime/Components/Vrm10Runtime/FastSpringBoneBufferFactory.cs +++ b/Assets/VRM10/Runtime/Components/Vrm10Runtime/FastSpringBoneBufferFactory.cs @@ -41,7 +41,7 @@ namespace UniVRM10 // create(Spring情報の再収集。設定変更の反映) var springs = vrm.SpringBone.Springs.Select(spring => new FastSpringBoneSpring - { + { center = spring.Center, colliders = spring.ColliderGroups .SelectMany(group => group.Colliders) @@ -74,7 +74,7 @@ namespace UniVRM10 await awaitCaller.NextFrame(); - fastSpringBoneBuffer = new FastSpringBoneBuffer(springs); + fastSpringBoneBuffer = new FastSpringBoneBuffer(vrm.transform, springs); return fastSpringBoneBuffer; } diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10FastSpringboneRuntime.cs b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10FastSpringboneRuntime.cs index 7c98dedfa..75793c5b1 100644 --- a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10FastSpringboneRuntime.cs +++ b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10FastSpringboneRuntime.cs @@ -3,6 +3,8 @@ using UniGLTF; using UnityEngine; using UniGLTF.SpringBoneJobs.InputPorts; using System.Threading.Tasks; +using UniGLTF.SpringBoneJobs.Blittables; +using UniGLTF.SpringBoneJobs; namespace UniVRM10 { @@ -17,18 +19,21 @@ namespace UniVRM10 private FastSpringBones.FastSpringBoneService m_fastSpringBoneService; private FastSpringBoneBuffer m_fastSpringBoneBuffer; - public Vector3 ExternalForce + public void SetJointLevel(Transform joint, BlittableJointMutable jointSettings) { - get => m_fastSpringBoneBuffer.ExternalForce; - set => m_fastSpringBoneBuffer.ExternalForce = value; - } - public bool IsSpringBoneEnabled - { - get => m_fastSpringBoneBuffer.IsSpringBoneEnabled; - set => m_fastSpringBoneBuffer.IsSpringBoneEnabled = value; + if (m_fastSpringBoneService.BufferCombiner.Combined is FastSpringBoneCombinedBuffer combined) + { + combined.SetJointLevel(joint, jointSettings); + } } - public float DeltaTime => throw new NotImplementedException(); + public void SetModelLevel(Transform modelRoot, BlittableModelLevel modelSettings) + { + if (m_fastSpringBoneService.BufferCombiner.Combined is FastSpringBoneCombinedBuffer combined) + { + combined.SetModelLevel(modelRoot, modelSettings); + } + } public async Task InitializeAsync(Vrm10Instance instance, IAwaitCaller awaitCaller) { diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10FastSpringboneRuntimeStandalone.cs b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10FastSpringboneRuntimeStandalone.cs index 43222561a..80e1eaf7d 100644 --- a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10FastSpringboneRuntimeStandalone.cs +++ b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10FastSpringboneRuntimeStandalone.cs @@ -3,6 +3,7 @@ using UnityEngine; using UniGLTF.SpringBoneJobs.InputPorts; using UniGLTF.SpringBoneJobs; using System.Threading.Tasks; +using UniGLTF.SpringBoneJobs.Blittables; namespace UniVRM10 { @@ -19,18 +20,21 @@ namespace UniVRM10 public FastSpringBoneBufferCombiner m_bufferCombiner = new(); private FastSpringBoneScheduler m_fastSpringBoneScheduler; - public Vector3 ExternalForce + public void SetJointLevel(Transform joint, BlittableJointMutable jointSettings) { - get => m_fastSpringBoneBuffer.ExternalForce; - set => m_fastSpringBoneBuffer.ExternalForce = value; - } - public bool IsSpringBoneEnabled - { - get => m_fastSpringBoneBuffer.IsSpringBoneEnabled; - set => m_fastSpringBoneBuffer.IsSpringBoneEnabled = value; + if (m_bufferCombiner.Combined is FastSpringBoneCombinedBuffer combined) + { + combined.SetJointLevel(joint, jointSettings); + } } - public float DeltaTime => Time.deltaTime; + public void SetModelLevel(Transform modelRoot, BlittableModelLevel modelSettings) + { + if (m_bufferCombiner.Combined is FastSpringBoneCombinedBuffer combined) + { + combined.SetModelLevel(modelRoot, modelSettings); + } + } public Vrm10FastSpringboneRuntimeStandalone() { @@ -115,7 +119,7 @@ namespace UniVRM10 public void Process() { - m_fastSpringBoneScheduler.Schedule(DeltaTime).Complete(); + m_fastSpringBoneScheduler.Schedule(Time.deltaTime).Complete(); } } } \ No newline at end of file diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10Runtime.cs b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10Runtime.cs index fbe655c63..6365c7c1e 100644 --- a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10Runtime.cs +++ b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10Runtime.cs @@ -30,11 +30,19 @@ namespace UniVRM10 public IVrm10SpringBoneRuntime SpringBone { get; } public IVrm10Animation VrmAnimation { get; set; } - [Obsolete("use Vrm10Runtime.SpringBone.ExternalForce")] + [Obsolete("use Vrm10Runtime.SpringBone.SetModelLevel")] public Vector3 ExternalForce { - get { return SpringBone.ExternalForce; } - set { SpringBone.ExternalForce = value; } + get + { + throw new NotImplementedException(); + // return SpringBone.ExternalForce; + } + set + { + // SpringBone.SetModelLevel = value; + throw new NotImplementedException(); + } } public Vrm10Runtime(Vrm10Instance instance, bool useControlRig, IVrm10SpringBoneRuntime springBoneRuntime) diff --git a/Assets/VRM10/Runtime/IO/IVrm10SpringBoneRuntime.cs b/Assets/VRM10/Runtime/IO/IVrm10SpringBoneRuntime.cs index 00714a46d..bfa66e038 100644 --- a/Assets/VRM10/Runtime/IO/IVrm10SpringBoneRuntime.cs +++ b/Assets/VRM10/Runtime/IO/IVrm10SpringBoneRuntime.cs @@ -1,8 +1,10 @@ using System; using System.Threading.Tasks; using UniGLTF; +using UniGLTF.SpringBoneJobs.Blittables; using UnityEngine; + namespace UniVRM10 { public interface IVrm10SpringBoneRuntime : IDisposable @@ -20,20 +22,23 @@ namespace UniVRM10 public void RestoreInitialTransform(); /// + /// Joint レベルの可変情報をセットする + /// stiffness, + /// + public void SetJointLevel(Transform joint, BlittableJointMutable jointSettings); + + /// + /// Model レベルの可変情報をセットする + /// 風, pause, scaling + /// + public void SetModelLevel(Transform modelRoot, BlittableModelLevel modelSettings); + + /// + /// System レベルの可変情報 + /// TODO: デザイン検討中。 /// deltaTime のカスタマイズポイント。通常は Time.dletaTime /// - public float DeltaTime { get; } - - /// - /// 風などの追加の外力を設定する - /// - public Vector3 ExternalForce { get; set; } - - /// - // SpringBone のランタイムの動作状態を設定する。 - // SpringBone の動きを一時停止したいときは false にする。 - /// - public bool IsSpringBoneEnabled { get; set; } + // public float DeltaTime { get; } /// /// 毎フレーム Vrm10Runtime.Process から呼ばれる。 diff --git a/Assets/VRM10_Samples/VRM10Viewer/VRM10.Samples.VRM10Viewer.asmdef b/Assets/VRM10_Samples/VRM10Viewer/VRM10.Samples.VRM10Viewer.asmdef index dc15df086..f40e22e2d 100644 --- a/Assets/VRM10_Samples/VRM10Viewer/VRM10.Samples.VRM10Viewer.asmdef +++ b/Assets/VRM10_Samples/VRM10Viewer/VRM10.Samples.VRM10Viewer.asmdef @@ -3,10 +3,10 @@ "rootNamespace": "", "references": [ "GUID:b7aa47b240b57de44a4b2021c143c9bf", - "GUID:da3e51d19d51a544fa14d43fee843098", "GUID:8d76e605759c3f64a957d63ef96ada7c", "GUID:e47c917724578cc43b5506c17a27e9a0", - "GUID:1cd941934d098654fa21a13f28346412" + "GUID:1cd941934d098654fa21a13f28346412", + "GUID:3e5d614bc16b50d41bd94c8d7444ca46" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/Assets/VRM10_Samples/VRM10Viewer/VRM10Loaded.cs b/Assets/VRM10_Samples/VRM10Viewer/VRM10Loaded.cs index 11d47dac9..b607a673f 100644 --- a/Assets/VRM10_Samples/VRM10Viewer/VRM10Loaded.cs +++ b/Assets/VRM10_Samples/VRM10Viewer/VRM10Loaded.cs @@ -8,6 +8,7 @@ namespace UniVRM10.VRM10Viewer { RuntimeGltfInstance m_instance; Vrm10Instance m_controller; + public Vrm10Instance Instance => m_controller; public Vrm10RuntimeControlRig ControlRig => m_controller.Runtime.ControlRig; public Vrm10Runtime Runtime => m_controller.Runtime; diff --git a/Assets/VRM10_Samples/VRM10Viewer/VRM10Viewer.unity b/Assets/VRM10_Samples/VRM10Viewer/VRM10Viewer.unity index e5f35d265..731b58285 100644 --- a/Assets/VRM10_Samples/VRM10Viewer/VRM10Viewer.unity +++ b/Assets/VRM10_Samples/VRM10Viewer/VRM10Viewer.unity @@ -281,6 +281,164 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 62367394} m_CullTransparentMesh: 0 +--- !u!1 &74180717 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 74180718} + - component: {fileID: 74180720} + - component: {fileID: 74180719} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &74180718 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 74180717} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1221148532} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &74180719 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 74180717} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &74180720 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 74180717} + m_CullTransparentMesh: 1 +--- !u!1 &87189655 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 87189656} + - component: {fileID: 87189658} + - component: {fileID: 87189657} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &87189656 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 87189655} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 434383452} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &87189657 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 87189655} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'ReconstructSpring + +' +--- !u!222 &87189658 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 87189655} + m_CullTransparentMesh: 0 --- !u!1 &103723703 GameObject: m_ObjectHideFlags: 0 @@ -312,7 +470,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 339774397} - m_RootOrder: 16 + m_RootOrder: 23 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -478,6 +636,169 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 154330167} m_CullTransparentMesh: 0 +--- !u!1 &154340881 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 154340882} + - component: {fileID: 154340883} + m_Layer: 5 + m_Name: ScalingSpringBone + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &154340882 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 154340881} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2140338386} + - {fileID: 626187927} + m_Father: {fileID: 339774397} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &154340883 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 154340881} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2140338387} + toggleTransition: 1 + graphic: {fileID: 2124505811} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 0 +--- !u!1 &156820478 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 156820479} + - component: {fileID: 156820481} + - component: {fileID: 156820480} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &156820479 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 156820478} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1828459436} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &156820480 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 156820478} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &156820481 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 156820478} + m_CullTransparentMesh: 1 --- !u!1 &168425994 GameObject: m_ObjectHideFlags: 0 @@ -1108,6 +1429,97 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 310000825} m_CullTransparentMesh: 0 +--- !u!1 &310817053 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 310817054} + - component: {fileID: 310817055} + m_Layer: 5 + m_Name: ExternalY + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &310817054 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 310817053} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1521028243} + - {fileID: 1925934808} + - {fileID: 816781596} + m_Father: {fileID: 339774397} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &310817055 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 310817053} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1400862396} + m_FillRect: {fileID: 2124827620} + m_HandleRect: {fileID: 1400862395} + m_Direction: 0 + m_MinValue: -10 + m_MaxValue: 10 + m_WholeNumbers: 0 + m_Value: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] --- !u!1 &322182884 GameObject: m_ObjectHideFlags: 0 @@ -1194,16 +1606,21 @@ RectTransform: - {fileID: 974864191} - {fileID: 1767706907} - {fileID: 1557052150} + - {fileID: 522109224} - {fileID: 1728528388} + - {fileID: 154340882} + - {fileID: 1814253213} + - {fileID: 1221148532} + - {fileID: 310817054} + - {fileID: 1828459436} - {fileID: 704896193} + - {fileID: 434383452} - {fileID: 597950322} - {fileID: 935566651} - {fileID: 634488421} - {fileID: 1767738854} - {fileID: 103723704} - {fileID: 602093298} - - {fileID: 1346594062} - - {fileID: 522109224} m_Father: {fileID: 124675794} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1356,6 +1773,128 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 427963460} m_CullTransparentMesh: 0 +--- !u!1 &434383451 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 434383452} + - component: {fileID: 434383455} + - component: {fileID: 434383454} + - component: {fileID: 434383453} + m_Layer: 5 + m_Name: ReconstructSpringBone\ + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &434383452 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 434383451} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 87189656} + m_Father: {fileID: 339774397} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 162, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &434383453 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 434383451} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 434383454} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &434383454 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 434383451} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &434383455 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 434383451} + m_CullTransparentMesh: 0 --- !u!1 &450042403 GameObject: m_ObjectHideFlags: 0 @@ -1620,7 +2159,7 @@ RectTransform: - {fileID: 2052921329} - {fileID: 20563309} m_Father: {fileID: 339774397} - m_RootOrder: 19 + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1786,7 +2325,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 339774397} - m_RootOrder: 12 + m_RootOrder: 19 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1867,7 +2406,7 @@ RectTransform: - {fileID: 154330168} - {fileID: 1954133885} m_Father: {fileID: 339774397} - m_RootOrder: 17 + m_RootOrder: 24 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1922,6 +2461,86 @@ MonoBehaviour: m_PersistentCalls: m_Calls: [] m_IsOn: 0 +--- !u!1 &626187926 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 626187927} + - component: {fileID: 626187929} + - component: {fileID: 626187928} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &626187927 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 626187926} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 154340882} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 9, y: -0.5} + m_SizeDelta: {x: -28, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &626187928 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 626187926} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: SupportScaling +--- !u!222 &626187929 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 626187926} + m_CullTransparentMesh: 1 --- !u!1 &634488420 GameObject: m_ObjectHideFlags: 0 @@ -1954,7 +2573,7 @@ RectTransform: - {fileID: 2010083454} - {fileID: 1081455630} m_Father: {fileID: 339774397} - m_RootOrder: 14 + m_RootOrder: 21 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2243,7 +2862,7 @@ RectTransform: m_Children: - {fileID: 983782643} m_Father: {fileID: 339774397} - m_RootOrder: 11 + m_RootOrder: 17 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2629,6 +3248,43 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 806723448} m_CullTransparentMesh: 0 +--- !u!1 &816781595 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 816781596} + m_Layer: 5 + m_Name: Handle Slide Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &816781596 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 816781595} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1400862395} + m_Father: {fileID: 310817054} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &826167455 GameObject: m_ObjectHideFlags: 0 @@ -3431,7 +4087,7 @@ RectTransform: - {fileID: 175751363} - {fileID: 1904789319} m_Father: {fileID: 339774397} - m_RootOrder: 13 + m_RootOrder: 20 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -4237,6 +4893,43 @@ RectTransform: m_AnchoredPosition: {x: 50, y: 0} m_SizeDelta: {x: -100, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1112632635 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1112632636} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1112632636 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1112632635} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1710765761} + m_Father: {fileID: 1221148532} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: -5, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &1140410863 GameObject: m_ObjectHideFlags: 0 @@ -4712,6 +5405,97 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1199975012} m_CullTransparentMesh: 0 +--- !u!1 &1221148531 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1221148532} + - component: {fileID: 1221148533} + m_Layer: 5 + m_Name: ExternalX + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1221148532 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1221148531} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 74180718} + - {fileID: 1112632636} + - {fileID: 2007464251} + m_Father: {fileID: 339774397} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1221148533 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1221148531} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1580403199} + m_FillRect: {fileID: 1710765761} + m_HandleRect: {fileID: 1580403198} + m_Direction: 0 + m_MinValue: -10 + m_MaxValue: 10 + m_WholeNumbers: 0 + m_Value: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] --- !u!1 &1242458542 GameObject: m_ObjectHideFlags: 0 @@ -4863,7 +5647,7 @@ MonoBehaviour: m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: PauseSpringBone + m_Text: Pause --- !u!222 &1258907233 CanvasRenderer: m_ObjectHideFlags: 0 @@ -5108,6 +5892,82 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1289294207} m_CullTransparentMesh: 0 +--- !u!1 &1299708885 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1299708886} + - component: {fileID: 1299708888} + - component: {fileID: 1299708887} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1299708886 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1299708885} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2068041823} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1299708887 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1299708885} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1299708888 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1299708885} + m_CullTransparentMesh: 1 --- !u!1 &1307084560 GameObject: m_ObjectHideFlags: 0 @@ -5473,7 +6333,7 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1322834809} m_CullTransparentMesh: 0 ---- !u!1 &1346594061 +--- !u!1 &1400862394 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -5481,78 +6341,74 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1346594062} - - component: {fileID: 1346594064} - - component: {fileID: 1346594063} + - component: {fileID: 1400862395} + - component: {fileID: 1400862397} + - component: {fileID: 1400862396} m_Layer: 5 - m_Name: _SpringBone_ + m_Name: Handle m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &1346594062 +--- !u!224 &1400862395 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346594061} + m_GameObject: {fileID: 1400862394} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 339774397} - m_RootOrder: 18 + m_Father: {fileID: 816781596} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 178, y: 30} + m_SizeDelta: {x: 20, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1346594063 +--- !u!114 &1400862396 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346594061} + m_GameObject: {fileID: 1400862394} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 1 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: SpringBone ---- !u!222 &1346594064 + m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1400862397 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346594061} - m_CullTransparentMesh: 0 + m_GameObject: {fileID: 1400862394} + m_CullTransparentMesh: 1 --- !u!1 &1407428956 GameObject: m_ObjectHideFlags: 0 @@ -5840,6 +6696,82 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1519258557} m_CullTransparentMesh: 1 +--- !u!1 &1521028242 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1521028243} + - component: {fileID: 1521028245} + - component: {fileID: 1521028244} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1521028243 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1521028242} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 310817054} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1521028244 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1521028242} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1521028245 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1521028242} + m_CullTransparentMesh: 1 --- !u!1 &1557052149 GameObject: m_ObjectHideFlags: 0 @@ -5920,6 +6852,82 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1557052149} m_CullTransparentMesh: 0 +--- !u!1 &1580403197 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1580403198} + - component: {fileID: 1580403200} + - component: {fileID: 1580403199} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1580403198 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1580403197} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2007464251} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1580403199 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1580403197} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1580403200 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1580403197} + m_CullTransparentMesh: 1 --- !u!1 &1621794410 GameObject: m_ObjectHideFlags: 0 @@ -6296,6 +7304,82 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1636340563} m_CullTransparentMesh: 0 +--- !u!1 &1710765760 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1710765761} + - component: {fileID: 1710765763} + - component: {fileID: 1710765762} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1710765761 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1710765760} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1112632636} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1710765762 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1710765760} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1710765763 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1710765760} + m_CullTransparentMesh: 1 --- !u!1 &1728528387 GameObject: m_ObjectHideFlags: 0 @@ -6328,7 +7412,7 @@ RectTransform: - {fileID: 1519258558} - {fileID: 1258907231} m_Father: {fileID: 339774397} - m_RootOrder: 10 + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -6662,7 +7746,7 @@ RectTransform: - {fileID: 62367395} - {fileID: 1037763549} m_Father: {fileID: 339774397} - m_RootOrder: 15 + m_RootOrder: 22 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -6836,15 +7920,20 @@ MonoBehaviour: m_openMotion: {fileID: 168425996} m_pastePose: {fileID: 1307084564} m_showBoxMan: {fileID: 1767706908} - m_pauseSpringBone: {fileID: 1728528389} - m_resetSpringBone: {fileID: 704896194} m_enableLipSync: {fileID: 935566650} m_enableAutoBlink: {fileID: 634488422} m_enableAutoExpression: {fileID: 1767738855} m_useAsync: {fileID: 602093299} - m_useSingelton: {fileID: 522109225} m_target: {fileID: 802105000} m_motion: {fileID: 4900000, guid: 08df5151e71aed748b13547492fb8b9a, type: 3} + m_useSpringboneSingelton: {fileID: 522109225} + m_springbonePause: {fileID: 1728528389} + m_springboneScaling: {fileID: 154340883} + m_springboneExternalX: {fileID: 1221148533} + m_springboneExternalY: {fileID: 310817055} + m_springboneExternalZ: {fileID: 1828459437} + m_resetSpringBone: {fileID: 704896194} + m_reconstructSpringBone: {fileID: 434383453} m_texts: m_textModelTitle: {fileID: 1111491925} m_textModelVersion: {fileID: 1045380263} @@ -6951,6 +8040,177 @@ MonoBehaviour: m_PersistentCalls: m_Calls: [] m_IsOn: 0 +--- !u!1 &1814253212 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1814253213} + - component: {fileID: 1814253215} + - component: {fileID: 1814253214} + m_Layer: 5 + m_Name: _SpringExternal_ + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1814253213 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1814253212} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 339774397} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 178, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1814253214 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1814253212} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: SpringExternal +--- !u!222 &1814253215 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1814253212} + m_CullTransparentMesh: 0 +--- !u!1 &1828459435 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1828459436} + - component: {fileID: 1828459437} + m_Layer: 5 + m_Name: ExternalZ + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1828459436 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1828459435} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 156820479} + - {fileID: 2063799833} + - {fileID: 2068041823} + m_Father: {fileID: 339774397} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1828459437 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1828459435} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1299708887} + m_FillRect: {fileID: 1872368843} + m_HandleRect: {fileID: 1299708886} + m_Direction: 0 + m_MinValue: -10 + m_MaxValue: 10 + m_WholeNumbers: 0 + m_Value: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] --- !u!1 &1866921957 GameObject: m_ObjectHideFlags: 0 @@ -7028,6 +8288,82 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1866921957} m_CullTransparentMesh: 0 +--- !u!1 &1872368842 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1872368843} + - component: {fileID: 1872368845} + - component: {fileID: 1872368844} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1872368843 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1872368842} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2063799833} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1872368844 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1872368842} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1872368845 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1872368842} + m_CullTransparentMesh: 1 --- !u!1 &1904789318 GameObject: m_ObjectHideFlags: 0 @@ -7271,6 +8607,43 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1923525314} m_CullTransparentMesh: 0 +--- !u!1 &1925934807 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1925934808} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1925934808 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1925934807} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2124827620} + m_Father: {fileID: 310817054} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: -5, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &1954133884 GameObject: m_ObjectHideFlags: 0 @@ -7509,6 +8882,43 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1987265554} m_CullTransparentMesh: 1 +--- !u!1 &2007464250 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2007464251} + m_Layer: 5 + m_Name: Handle Slide Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2007464251 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2007464250} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1580403198} + m_Father: {fileID: 1221148532} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &2009818431 GameObject: m_ObjectHideFlags: 0 @@ -7861,6 +9271,80 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2055567528} m_CullTransparentMesh: 1 +--- !u!1 &2063799832 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2063799833} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2063799833 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2063799832} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1872368843} + m_Father: {fileID: 1828459436} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: -5, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &2068041822 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2068041823} + m_Layer: 5 + m_Name: Handle Slide Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2068041823 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2068041822} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1299708886} + m_Father: {fileID: 1828459436} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &2105159131 GameObject: m_ObjectHideFlags: 0 @@ -7942,6 +9426,235 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2105159131} m_CullTransparentMesh: 0 +--- !u!1 &2124505809 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2124505810} + - component: {fileID: 2124505812} + - component: {fileID: 2124505811} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2124505810 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124505809} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2140338386} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2124505811 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124505809} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2124505812 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124505809} + m_CullTransparentMesh: 1 +--- !u!1 &2124827619 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2124827620} + - component: {fileID: 2124827622} + - component: {fileID: 2124827621} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2124827620 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124827619} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1925934808} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2124827621 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124827619} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2124827622 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124827619} + m_CullTransparentMesh: 1 +--- !u!1 &2140338385 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2140338386} + - component: {fileID: 2140338388} + - component: {fileID: 2140338387} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2140338386 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140338385} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2124505810} + m_Father: {fileID: 154340882} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 10, y: -10} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2140338387 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140338385} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2140338388 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140338385} + m_CullTransparentMesh: 1 --- !u!1 &2141451816 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/VRM10_Samples/VRM10Viewer/VRM10ViewerUI.cs b/Assets/VRM10_Samples/VRM10Viewer/VRM10ViewerUI.cs index 0a84d5e34..f7b442561 100644 --- a/Assets/VRM10_Samples/VRM10Viewer/VRM10ViewerUI.cs +++ b/Assets/VRM10_Samples/VRM10Viewer/VRM10ViewerUI.cs @@ -3,6 +3,7 @@ using System.IO; using System.Linq; using System.Threading; using UniGLTF; +using UniGLTF.SpringBoneJobs.Blittables; using UnityEngine; using UnityEngine.UI; @@ -26,12 +27,6 @@ namespace UniVRM10.VRM10Viewer [SerializeField] Toggle m_showBoxMan = default; - [SerializeField] - Toggle m_pauseSpringBone = default; - - [SerializeField] - Button m_resetSpringBone = default; - [SerializeField] Toggle m_enableLipSync = default; @@ -44,15 +39,34 @@ namespace UniVRM10.VRM10Viewer [SerializeField] Toggle m_useAsync = default; - [SerializeField] - Toggle m_useSingelton = default; - [SerializeField] GameObject m_target = default; [SerializeField] TextAsset m_motion; + // springbone + [SerializeField] + Toggle m_useSpringboneSingelton = default; + + [SerializeField] + Toggle m_springbonePause = default; + + [SerializeField] + Toggle m_springboneScaling = default; + + [SerializeField] + Slider m_springboneExternalX = default; + [SerializeField] + Slider m_springboneExternalY = default; + [SerializeField] + Slider m_springboneExternalZ = default; + + [SerializeField] + Button m_resetSpringBone = default; + [SerializeField] + Button m_reconstructSpringBone = default; + GameObject Root = default; IVrm10Animation m_src = default; @@ -257,7 +271,6 @@ namespace UniVRM10.VRM10Viewer m_openModel = buttons.First(x => x.name == "OpenModel"); m_openMotion = buttons.First(x => x.name == "OpenMotion"); m_pastePose = buttons.First(x => x.name == "PastePose"); - m_resetSpringBone = buttons.First(x => x.name == "ResetSpringBone"); #if UNITY_2022_3_OR_NEWER var toggles = GameObject.FindObjectsByType(FindObjectsSortMode.InstanceID); @@ -265,12 +278,15 @@ namespace UniVRM10.VRM10Viewer var toggles = GameObject.FindObjectsOfType(); #endif m_showBoxMan = toggles.First(x => x.name == "ShowBoxMan"); - m_pauseSpringBone = toggles.First(x => x.name == "PauseSpringBone"); m_enableLipSync = toggles.First(x => x.name == "EnableLipSync"); m_enableAutoBlink = toggles.First(x => x.name == "EnableAutoBlink"); m_enableAutoExpression = toggles.First(x => x.name == "EnableAutoExpression"); m_useAsync = toggles.First(x => x.name == "UseAsync"); - m_useSingelton = toggles.First(x => x.name == "UseSingleton"); + + m_useSpringboneSingelton = toggles.First(x => x.name == "UseSingleton"); + m_springbonePause = toggles.First(x => x.name == "PauseSpringBone"); + m_resetSpringBone = buttons.First(x => x.name == "ResetSpringBone"); + #if UNITY_2022_3_OR_NEWER var texts = GameObject.FindObjectsByType(FindObjectsSortMode.InstanceID); @@ -355,6 +371,7 @@ namespace UniVRM10.VRM10Viewer m_openMotion.onClick.AddListener(OnOpenMotionClicked); m_pastePose.onClick.AddListener(OnPastePoseClicked); m_resetSpringBone.onClick.AddListener(OnResetSpringBoneClicked); + m_reconstructSpringBone.onClick.AddListener(OnReconstructSpringBoneClicked); // load initial bvh if (m_motion != null) @@ -414,7 +431,12 @@ namespace UniVRM10.VRM10Viewer m_loaded.Runtime.VrmAnimation = Motion; } - m_loaded.Runtime.SpringBone.IsSpringBoneEnabled = !m_pauseSpringBone.isOn; + m_loaded.Runtime.SpringBone.SetModelLevel(m_loaded.Instance.transform, new BlittableModelLevel + { + ExternalForce = new Vector3(m_springboneExternalX.value, m_springboneExternalY.value, m_springboneExternalZ.value), + StopSpringBoneWriteback = m_springbonePause.isOn, + SupportsScalingAtRuntime = m_springboneScaling.isOn, + }); } } } @@ -505,6 +527,17 @@ namespace UniVRM10.VRM10Viewer } } + void OnReconstructSpringBoneClicked() + { + if (m_loaded != null) + { + if (m_loaded.Runtime != null) + { + m_loaded.Runtime.SpringBone.ReconstructSpringBone(); + } + } + } + static IMaterialDescriptorGenerator GetVrmMaterialDescriptorGenerator(bool useUrp) { if (useUrp) @@ -547,7 +580,7 @@ namespace UniVRM10.VRM10Viewer awaitCaller: m_useAsync.enabled ? new RuntimeOnlyAwaitCaller() : new ImmediateCaller(), vrmMetaInformationCallback: m_texts.UpdateMeta, ct: cancellationToken, - springboneRuntime: m_useSingelton.isOn ? new Vrm10FastSpringboneRuntime() : new Vrm10FastSpringboneRuntimeStandalone()); + springboneRuntime: m_useSpringboneSingelton.isOn ? new Vrm10FastSpringboneRuntime() : new Vrm10FastSpringboneRuntimeStandalone()); if (cancellationToken.IsCancellationRequested) { UnityObjectDestroyer.DestroyRuntimeOrEditor(vrm10Instance.gameObject);