summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Unit
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-07-22 18:34:47 +0800
committerchai <chaifix@163.com>2021-07-22 18:34:47 +0800
commitcb893e1e5e4820cb800836cf6b8a79a1cd986cdc (patch)
treec96f8020c760d89d418684b71de294556d6961d3 /Assets/Scripts/Unit
parentf7f2ebc0ce06aaf7d34325258c9bfe689043de94 (diff)
*misc
Diffstat (limited to 'Assets/Scripts/Unit')
-rw-r--r--Assets/Scripts/Unit/AnimationData.cs70
-rw-r--r--Assets/Scripts/Unit/Events/AnimationEventBase.cs8
-rw-r--r--Assets/Scripts/Unit/Events/EventAfterImage.cs16
-rw-r--r--Assets/Scripts/Unit/Events/EventAfterImage.cs.meta11
-rw-r--r--Assets/Scripts/Unit/Events/EventBulletTime.cs9
-rw-r--r--Assets/Scripts/Unit/Events/EventBulletTime.cs.meta11
-rw-r--r--Assets/Scripts/Unit/Events/EventCameraBlur.cs18
-rw-r--r--Assets/Scripts/Unit/Events/EventCameraBlur.cs.meta11
-rw-r--r--Assets/Scripts/Unit/Events/EventCameraShake.cs18
-rw-r--r--Assets/Scripts/Unit/Events/EventCameraShake.cs.meta11
-rw-r--r--Assets/Scripts/Unit/Events/EventCameraWhiteOut.cs18
-rw-r--r--Assets/Scripts/Unit/Events/EventCameraWhiteOut.cs.meta11
-rw-r--r--Assets/Scripts/Unit/Events/EventCameraZoom.cs18
-rw-r--r--Assets/Scripts/Unit/Events/EventCameraZoom.cs.meta11
-rw-r--r--Assets/Scripts/Unit/Events/EventEffect.cs17
-rw-r--r--Assets/Scripts/Unit/Events/EventMeshFade.cs8
-rw-r--r--Assets/Scripts/Unit/Events/EventMeshFade.cs.meta11
-rw-r--r--Assets/Scripts/Unit/TimelineEvent.cs107
18 files changed, 179 insertions, 205 deletions
diff --git a/Assets/Scripts/Unit/AnimationData.cs b/Assets/Scripts/Unit/AnimationData.cs
index 72a3db24..f1204a50 100644
--- a/Assets/Scripts/Unit/AnimationData.cs
+++ b/Assets/Scripts/Unit/AnimationData.cs
@@ -1,6 +1,10 @@
-using System.Collections;
+using System;
+using System.Collections;
using System.Collections.Generic;
using UnityEngine;
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
// 某个动画的数据,包括帧事件、碰撞盒
[CreateAssetMenu(fileName = "Animation Data")]
@@ -16,7 +20,7 @@ public class AnimationData : ScriptableObject
public List<ColliderData> throwBoxes;
public List<ColliderData> blockBoxes;
public List<ColliderData> defendBoxes;
-
+
public int GetBoxesCount()
{
int hurt = hurtBoxes != null ? hurtBoxes.Count : 0;
@@ -71,4 +75,66 @@ public class AnimationData : ScriptableObject
return null;
}
+ public void AddEvent(AnimationEventBase animEvent)
+ {
+ if (this.animationEvents == null)
+ this.animationEvents = new List<AnimationEventBase>();
+ animationEvents.Add(animEvent);
+ }
+
+ public List<AnimationEventBase> GetAnimationEventsAtFrame(int frame)
+ {
+ if (animationEvents == null)
+ return null;
+
+ List<AnimationEventBase> events = ListPool<AnimationEventBase>.Get();
+ events.Clear();
+ foreach (var animeEvent in animationEvents)
+ {
+ if(animeEvent.startFrame == frame)
+ {
+ events.Add(animeEvent);
+ }
+ }
+ return events;
+ }
+
+ public List<int> GetAnimationEventFrameIndices()
+ {
+ if (animationEvents == null)
+ return null;
+
+ List<int> frames = ListPool<int>.Get();
+ frames.Clear();
+ foreach (var animeEvent in animationEvents)
+ {
+ if (!frames.Contains(animeEvent.startFrame))
+ {
+ frames.Add(animeEvent.startFrame);
+ }
+ }
+ return frames;
+ }
+
+ public void DeleteEvent(AnimationEventBase animEvent)
+ {
+ if(animationEvents.Contains(animEvent))
+ {
+ animationEvents.Remove(animEvent);
+ }
+ }
+
+#if UNITY_EDITOR
+ public void OnSaveToDisk()
+ {
+ foreach(var animEvent in animationEvents)
+ {
+ if(!AssetDatabase.IsSubAsset(animEvent))
+ {
+ AssetDatabase.AddObjectToAsset(animEvent, this);
+ }
+ }
+ }
+#endif
+
}
diff --git a/Assets/Scripts/Unit/Events/AnimationEventBase.cs b/Assets/Scripts/Unit/Events/AnimationEventBase.cs
index bcaf9eae..774f7b38 100644
--- a/Assets/Scripts/Unit/Events/AnimationEventBase.cs
+++ b/Assets/Scripts/Unit/Events/AnimationEventBase.cs
@@ -1,9 +1,11 @@
-using System.Collections;
+using System;
+using System.Collections;
using System.Collections.Generic;
using UnityEngine;
-public class AnimationEventBase : ScriptableObject
+public abstract class AnimationEventBase : ScriptableObject
{
public int startFrame;
- public TimelineEvent.EEventType type;
+
+ public abstract TimelineEvent.EEventType type { get; }
}
diff --git a/Assets/Scripts/Unit/Events/EventAfterImage.cs b/Assets/Scripts/Unit/Events/EventAfterImage.cs
deleted file mode 100644
index 9c0ea5ac..00000000
--- a/Assets/Scripts/Unit/Events/EventAfterImage.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class EventAfterImage : AnimationEventBase
-{
- public enum EAfterImageType
- {
- None = 0,
- BlackWhite,
- Golden,
- }
-
- public EAfterImageType afterType;
-
-}
diff --git a/Assets/Scripts/Unit/Events/EventAfterImage.cs.meta b/Assets/Scripts/Unit/Events/EventAfterImage.cs.meta
deleted file mode 100644
index 9985730b..00000000
--- a/Assets/Scripts/Unit/Events/EventAfterImage.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: d07ec6150f55c1844a54dbc664e0c95d
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Unit/Events/EventBulletTime.cs b/Assets/Scripts/Unit/Events/EventBulletTime.cs
deleted file mode 100644
index 22c2b83f..00000000
--- a/Assets/Scripts/Unit/Events/EventBulletTime.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class EventBulletTime : AnimationEventBase
-{
-
-
-}
diff --git a/Assets/Scripts/Unit/Events/EventBulletTime.cs.meta b/Assets/Scripts/Unit/Events/EventBulletTime.cs.meta
deleted file mode 100644
index 1d2e22dc..00000000
--- a/Assets/Scripts/Unit/Events/EventBulletTime.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 554b381d61ce5494b9b4e60b72521a6b
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Unit/Events/EventCameraBlur.cs b/Assets/Scripts/Unit/Events/EventCameraBlur.cs
deleted file mode 100644
index bab672fa..00000000
--- a/Assets/Scripts/Unit/Events/EventCameraBlur.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class EventCameraBlur : MonoBehaviour
-{
- // Start is called before the first frame update
- void Start()
- {
-
- }
-
- // Update is called once per frame
- void Update()
- {
-
- }
-}
diff --git a/Assets/Scripts/Unit/Events/EventCameraBlur.cs.meta b/Assets/Scripts/Unit/Events/EventCameraBlur.cs.meta
deleted file mode 100644
index 816be65b..00000000
--- a/Assets/Scripts/Unit/Events/EventCameraBlur.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 6f064336a95165d4fa6af02fadb70bc0
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Unit/Events/EventCameraShake.cs b/Assets/Scripts/Unit/Events/EventCameraShake.cs
deleted file mode 100644
index f352f415..00000000
--- a/Assets/Scripts/Unit/Events/EventCameraShake.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class EventCameraShake : MonoBehaviour
-{
- // Start is called before the first frame update
- void Start()
- {
-
- }
-
- // Update is called once per frame
- void Update()
- {
-
- }
-}
diff --git a/Assets/Scripts/Unit/Events/EventCameraShake.cs.meta b/Assets/Scripts/Unit/Events/EventCameraShake.cs.meta
deleted file mode 100644
index 7e19dd10..00000000
--- a/Assets/Scripts/Unit/Events/EventCameraShake.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: c9aeba330898fc54fb170f0689e5460c
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Unit/Events/EventCameraWhiteOut.cs b/Assets/Scripts/Unit/Events/EventCameraWhiteOut.cs
deleted file mode 100644
index b9cb1a2e..00000000
--- a/Assets/Scripts/Unit/Events/EventCameraWhiteOut.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class EventCameraWhiteOut : MonoBehaviour
-{
- // Start is called before the first frame update
- void Start()
- {
-
- }
-
- // Update is called once per frame
- void Update()
- {
-
- }
-}
diff --git a/Assets/Scripts/Unit/Events/EventCameraWhiteOut.cs.meta b/Assets/Scripts/Unit/Events/EventCameraWhiteOut.cs.meta
deleted file mode 100644
index 2c73556e..00000000
--- a/Assets/Scripts/Unit/Events/EventCameraWhiteOut.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: f4a27077d030aa54ebbb7c192ca59979
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Unit/Events/EventCameraZoom.cs b/Assets/Scripts/Unit/Events/EventCameraZoom.cs
deleted file mode 100644
index 8efac028..00000000
--- a/Assets/Scripts/Unit/Events/EventCameraZoom.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class EventCameraZoom : MonoBehaviour
-{
- // Start is called before the first frame update
- void Start()
- {
-
- }
-
- // Update is called once per frame
- void Update()
- {
-
- }
-}
diff --git a/Assets/Scripts/Unit/Events/EventCameraZoom.cs.meta b/Assets/Scripts/Unit/Events/EventCameraZoom.cs.meta
deleted file mode 100644
index 9fb41c39..00000000
--- a/Assets/Scripts/Unit/Events/EventCameraZoom.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 5214828735209264c83cf0e3b1c12efe
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Unit/Events/EventEffect.cs b/Assets/Scripts/Unit/Events/EventEffect.cs
index 65479cb7..449b1e23 100644
--- a/Assets/Scripts/Unit/Events/EventEffect.cs
+++ b/Assets/Scripts/Unit/Events/EventEffect.cs
@@ -4,10 +4,23 @@ using UnityEngine;
public class EventEffect : AnimationEventBase
{
- public string effectName;
+ public override TimelineEvent.EEventType type { get { return TimelineEvent.EEventType.EventEffect; } }
+
+ [Tooltip("Effect path")]
+ public string effectPath;
+
+ [Tooltip("Is attached to a bone")]
public bool attached;
+
+ [Tooltip("Bone path attach to")]
public string bone;
+
+ [Tooltip("Position offset")]
public Vector3 position;
- public Quaternion rotation;
+
+ [Tooltip("Rotation in euler")]
+ public Vector3 rotation;
+
+ [Tooltip("Scale")]
public Vector3 scale;
}
diff --git a/Assets/Scripts/Unit/Events/EventMeshFade.cs b/Assets/Scripts/Unit/Events/EventMeshFade.cs
deleted file mode 100644
index ee256b0f..00000000
--- a/Assets/Scripts/Unit/Events/EventMeshFade.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class EventMeshFade : AnimationEventBase
-{
-
-}
diff --git a/Assets/Scripts/Unit/Events/EventMeshFade.cs.meta b/Assets/Scripts/Unit/Events/EventMeshFade.cs.meta
deleted file mode 100644
index 5ab8c0bf..00000000
--- a/Assets/Scripts/Unit/Events/EventMeshFade.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 761dbef185f094f439b2710ed7e5fcd1
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Unit/TimelineEvent.cs b/Assets/Scripts/Unit/TimelineEvent.cs
index f0a28ec6..6a69934b 100644
--- a/Assets/Scripts/Unit/TimelineEvent.cs
+++ b/Assets/Scripts/Unit/TimelineEvent.cs
@@ -1,6 +1,11 @@
-using System.Collections;
+using System;
+using System.Collections;
+using System.Reflection;
using System.Collections.Generic;
using UnityEngine;
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
// 动画帧事件
[DisallowMultipleComponent]
@@ -8,33 +13,103 @@ public partial class TimelineEvent: MonoBehaviour
{
public enum EEventType
{
- EventCameraZoom, // 相机聚焦
- EventCameraShake, // 相机晃动
- EventCameraBlur, // 相机模糊
- EventCameraWhiteOut, // 相机白屏
- EventAfterImage, // 角色残像
- EventMeshFade, // 角色透明度
- EventMeshGloss, // 角色泛光
- EventProjectile, // 发射体
- EventEffect, // 特效
- EventSound, // 音效
- EventUIDrift, //
+ EventCamera_Zoom, // 相机聚焦
+ EventCamera_Shake, // 相机晃动
+ EventCamera_Blur, // 相机模糊
+ EventCamera_WhiteOut, // 相机白屏
+
+ EventMesh_AfterImage, // 角色残像
+ EventMesh_Fade, // 角色透明度
+ EventMesh_Gloss, // 角色泛光
+
+ EventEnv_Dark,
+ EventEnv_Exposure,
+
+ EventUI_Drift, //
+ EventUI_Blur, //
+
+ EventProjectile, // 发射体
+ EventEffect, // 特效
+ EventSound, // 音效
+
+ EventBulletTime, // 子弹时间
}
public const int kMaxEventsPerFrame = 10;
- void EventEffect(EventEffect effect)
+ private int m_PrevFrame = -1;
+
+ public static Type GetTypeByName(string name)
{
+ Type type = Type.GetType(name);
+ return type;
}
- void EventAfterImage(EventAfterImage afterImage)
+ public void ExecuteAnimationEvents(AnimationData animData, float animFrame)
+ {
+ if (animData == null)
+ return;
+ int frame = (int)animFrame;
+ if(frame != m_PrevFrame)
+ {
+ for(int i = m_PrevFrame + 1; i <= frame; i++)
+ {
+ List<int> framesHasEvent = animData.GetAnimationEventFrameIndices();
+ if (framesHasEvent.Contains(i))
+ {
+ List<AnimationEventBase> events = animData.GetAnimationEventsAtFrame(i);
+ ExecuteEvents(events);
+ ListPool<AnimationEventBase>.Release(events);
+ }
+ ListPool<int>.Release(framesHasEvent);
+ }
+ }
+ m_PrevFrame = frame;
+ }
+
+ void ExecuteEvents(List<AnimationEventBase> events)
+ {
+ if (events == null || events.Count == 0)
+ return;
+ foreach(var e in events)
+ {
+ string name = e.type.ToString();
+ MethodInfo method = GetType().GetMethod(name, BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] { typeof(AnimationEventBase) }, null);
+ if(method != null)
+ {
+ object[] param = new object[] {e };
+ method.Invoke(this, param);
+ }
+ }
+ }
+
+ #region Event handle
+
+ void EventEffect(AnimationEventBase animEvent)
{
+ EventEffect effect = animEvent as EventEffect;
+ if (effect == null)
+ return;
+ string path = effect.effectPath;
+#if UNITY_EDITOR
+ GameObject prefab = AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)) as GameObject;
+ if(prefab != null)
+ {
+ GameObject root = new GameObject();
+ GameObject go = GameObject.Instantiate(prefab);
+ go.transform.SetParent(root.transform);
+ FxClear onClear = root.AddComponent<FxClear>();
+ onClear.RunInEditor = true;
+ onClear.Initialize(new PlayEffectInfo(path, EffectPlayTypes.Oneshot, transform, effect.position, effect.rotation, effect.scale, 0, false));
+ }
+#endif
}
- void EventMeshFade(EventMeshFade meshFade)
+ void EventCamera_Shake(AnimationEventBase animEvent)
{
}
-} \ No newline at end of file
+ #endregion
+} \ No newline at end of file