123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- using System;
- using kt.Serialization;
- using UnityEngine;
- [Serializable]
- public class DynamicBoneStatus : ASerializationVersionControl
- {
- public override int FixVersion
- {
- get
- {
- return 1000;
- }
- }
- public override void OnBeforeSerialize()
- {
- base.OnBeforeSerialize();
- this.DampingKeyFrames = DynamicBoneStatus.CreateAnimationKeyFrames(this.dampingCurve);
- this.ElasticityKeyFrames = DynamicBoneStatus.CreateAnimationKeyFrames(this.elasticityCurve);
- this.StiffnessKeyFrames = DynamicBoneStatus.CreateAnimationKeyFrames(this.stiffnessCurve);
- this.InertKeyFrames = DynamicBoneStatus.CreateAnimationKeyFrames(this.inertCurve);
- this.RadiusKeyFrames = DynamicBoneStatus.CreateAnimationKeyFrames(this.radiusCurve);
- }
- public override void OnAfterDeserialize()
- {
- base.OnAfterDeserialize();
- this.dampingCurve = DynamicBoneStatus.CreateAnimationCurve(this.DampingKeyFrames);
- this.elasticityCurve = DynamicBoneStatus.CreateAnimationCurve(this.ElasticityKeyFrames);
- this.stiffnessCurve = DynamicBoneStatus.CreateAnimationCurve(this.StiffnessKeyFrames);
- this.inertCurve = DynamicBoneStatus.CreateAnimationCurve(this.InertKeyFrames);
- this.radiusCurve = DynamicBoneStatus.CreateAnimationCurve(this.RadiusKeyFrames);
- }
- public static DynamicBoneStatus.AnimationKeyFrame[] CreateAnimationKeyFrames(AnimationCurve curve)
- {
- Keyframe[] array = (curve == null) ? null : curve.keys;
- if (array == null)
- {
- return new DynamicBoneStatus.AnimationKeyFrame[0];
- }
- DynamicBoneStatus.AnimationKeyFrame[] array2 = new DynamicBoneStatus.AnimationKeyFrame[array.Length];
- for (int i = 0; i < array.Length; i++)
- {
- array2[i] = new DynamicBoneStatus.AnimationKeyFrame
- {
- time = array[i].time,
- value = array[i].value,
- inTangent = array[i].inTangent,
- outTangent = array[i].outTangent
- };
- }
- return array2;
- }
- public static AnimationCurve CreateAnimationCurve(DynamicBoneStatus.AnimationKeyFrame[] keys)
- {
- if (keys == null)
- {
- return null;
- }
- Keyframe[] array = new Keyframe[keys.Length];
- for (int i = 0; i < array.Length; i++)
- {
- array[i] = new Keyframe
- {
- time = keys[i].time,
- value = keys[i].value,
- inTangent = keys[i].inTangent,
- outTangent = keys[i].outTangent
- };
- }
- return new AnimationCurve(array);
- }
- [Header("減衰率。値が小さいと素早く小刻みに揺れる。大きいとゆっくり大振りで揺れる。")]
- [Range(0f, 1f)]
- public float damping = 0.6f;
- [SerializeField]
- [HideInInspector]
- private DynamicBoneStatus.AnimationKeyFrame[] DampingKeyFrames;
- public AnimationCurve dampingCurve;
- [Header("復元率。値が大きいと素早く元の形状に戻る。小さいとゆっくりと元の形状に戻る。")]
- [Range(0f, 1f)]
- public float elasticity = 0.1f;
- [SerializeField]
- [HideInInspector]
- private DynamicBoneStatus.AnimationKeyFrame[] ElasticityKeyFrames;
- public AnimationCurve elasticityCurve;
- [Header("剛性(揺れ幅)")]
- [Range(0f, 1f)]
- public float stiffness = 0.1f;
- [SerializeField]
- [HideInInspector]
- private DynamicBoneStatus.AnimationKeyFrame[] StiffnessKeyFrames;
- public AnimationCurve stiffnessCurve;
- [Header("移動距離による物理無視率。値が大きいほど少しの移動では揺れなくなる。")]
- [Range(0f, 1f)]
- public float inert;
- [SerializeField]
- [HideInInspector]
- private DynamicBoneStatus.AnimationKeyFrame[] InertKeyFrames;
- public AnimationCurve inertCurve;
- [Header("各ノードの当たり判定半径")]
- public float radius;
- [SerializeField]
- [HideInInspector]
- private DynamicBoneStatus.AnimationKeyFrame[] RadiusKeyFrames;
- public AnimationCurve radiusCurve;
- [Header("先端に余分ボーンの追加")]
- public float endLength;
- [Header("先端に余分ボーンのオフセット座標")]
- public Vector3 endOffset;
- [Header("重力の向き(形はある程度維持される)")]
- public Vector3 gravity = Vector3.down * 0.05f;
- [Header("力の向き(形は維持されない)")]
- public Vector3 force;
- [Header("揺れを「行わない」向きの指定。指定した場合はその向きには揺れなくなる")]
- public DynamicBoneStatus.FreezeAxis freezeAxis;
- public enum FreezeAxis
- {
- None,
- X,
- Y,
- Z
- }
- [Serializable]
- public class AnimationKeyFrame
- {
- public float time;
- public float value;
- public float inTangent;
- public float outTangent;
- }
- }
|