summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Unit/TimelineEvent.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/Unit/TimelineEvent.cs')
-rw-r--r--Assets/Scripts/Unit/TimelineEvent.cs107
1 files changed, 91 insertions, 16 deletions
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