From 7669c3afcbd71f06233bce12bb521c582c07ee5b Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 9 Aug 2021 08:47:48 +0800 Subject: *misc --- Assets/Scripts/Unit/AnimationData.cs | 121 ++++++++++++++++++++++++++--------- 1 file changed, 92 insertions(+), 29 deletions(-) (limited to 'Assets/Scripts/Unit/AnimationData.cs') diff --git a/Assets/Scripts/Unit/AnimationData.cs b/Assets/Scripts/Unit/AnimationData.cs index 6035978d..465c0806 100644 --- a/Assets/Scripts/Unit/AnimationData.cs +++ b/Assets/Scripts/Unit/AnimationData.cs @@ -15,39 +15,86 @@ public enum EAnimationToogle } [Serializable] -public class ToggleTimeDictionary : SerializableDictionary { } +public struct FromTo +{ + [SerializeField] public float from; + [SerializeField] public float to; + public Vector2 fromTo + { + get + { + return new Vector2(from, to); + } + set + { + from = value.x; + to = value.y; + } + } + public FromTo(float from, float to) + { + this.from = from; + this.to = to; + } + public FromTo(Vector2 fromTo) + { + this.from = fromTo.x; + this.to = fromTo.y; + } +} + +[Serializable] +public class ToggleTimeDictionary : SerializableDictionary { } public enum EAnimationCurve { TimeScale = 0, // + RootMotionScale = 1, } [Serializable] public class CurveDictionary : SerializableDictionary { } +[Serializable] +public struct AnimationParameter +{ + [Serializable] + public struct Setter + { + [SerializeField] public float normalizedTime; + [SerializeField] public float value; + } + [SerializeField] public List setters; +} + +[Serializable] +public class ParameterDictionary : SerializableDictionary { } + // 某个动画的数据,包括帧事件、碰撞盒、速度曲线 [CreateAssetMenu(fileName = "Animation Data")] public class AnimationData : ScriptableObject { - public string animationName; - public string animationPath; + public string animationName; + public string animationPath; - public List animationEvents; + public List animationEvents; - public List hurtBoxes; - public List hitBoxes; - public List throwBoxes; - public List blockBoxes; - public List defendBoxes; + public List hurtBoxes; + public List hitBoxes; + public List throwBoxes; + public List blockBoxes; + public List defendBoxes; - // 对应的进度的播放速度,默认是1 + // 对应的进度的播放速度,默认是1 [UnityEngine.Serialization.FormerlySerializedAs("curve")] - public AnimationCurve speedCurve; + public AnimationCurve speedCurve; public CurveDictionary curves; public ToggleTimeDictionary toggles; + public ParameterDictionary parameters; + public const int FPS = 30; public AnimationData() @@ -57,23 +104,39 @@ public class AnimationData : ScriptableObject speedCurve = new AnimationCurve(frame0, frame1); } - public List GetColliderBoxesByType(ColliderBox.EColliderType type) - { - switch(type) - { - case ColliderBox.EColliderType.HurtBox: - return hurtBoxes; - case ColliderBox.EColliderType.HitBox: - return hitBoxes; - case ColliderBox.EColliderType.BlockBox: - return blockBoxes; - case ColliderBox.EColliderType.ThrowBox: - return throwBoxes; - case ColliderBox.EColliderType.DefendBox: - return defendBoxes; - } - return null; - } + public List GetColliderBoxesByType(ColliderBox.EColliderType type) + { + switch (type) + { + case ColliderBox.EColliderType.HurtBox: + return hurtBoxes; + case ColliderBox.EColliderType.HitBox: + return hitBoxes; + case ColliderBox.EColliderType.BlockBox: + return blockBoxes; + case ColliderBox.EColliderType.ThrowBox: + return throwBoxes; + case ColliderBox.EColliderType.DefendBox: + return defendBoxes; + } + return null; + } + + //public bool HasParameter(string parameterName, float normalizedTime) + //{ + // if (!parameters.ContainsKey(parameterName)) + // return false; + // var parameter = parameters[parameterName]; + // parameter.setters.Sort((AnimationParameter.Setter a, AnimationParameter.Setter b) => + // { + // return a.normalizedTime - b.normalizedTime < 0 ? -1 : 1; + // }); + //} + + //public float GetParameter(string parameter, float normalizedTime) + //{ + + //} public bool HasCurve(EAnimationCurve curve) { @@ -96,7 +159,7 @@ public class AnimationData : ScriptableObject { if (!HasToggle(toggle)) return false; - return toggles[toggle].y <= normalizedTime && normalizedTime >= toggles[toggle].x; + return toggles[toggle].to <= normalizedTime && normalizedTime >= toggles[toggle].from; } public ColliderInfo GetColliderInfo(ColliderBox.EColliderType type, int index, float playbackTime) -- cgit v1.1-26-g67d0