状态类:
1 using System; 2 using System.Collections; 3 using System.Collections.Generic; 4 using UnityEngine; 5 6 public class State 7 { 8 /// <summary> 9 /// 存储状态能够转换的列表 10 /// </summary> 11 protected List<Type> list = new List<Type>(); 12 13 /// <summary> 14 /// 添加可转换状态到列表中存储 15 /// </summary> 16 /// <typeparam name="T"></typeparam> 17 public void AddTransition<T>() where T :State 18 { 19 if (list.Contains(typeof(T))) 20 { 21 Debug.LogError("转换状态:" + typeof(T) + "已经有了对应的状态"); 22 return; 23 } 24 list.Add(typeof(T)); 25 } 26 27 /// <summary> 28 /// 从列表中删除某个可转换的状态 29 /// </summary> 30 /// <typeparam name="T"></typeparam> 31 public void DeleteTransition<T>() where T : State 32 { 33 if (list.Contains(typeof(T)) == false) 34 { 35 Debug.LogWarning("转换条件:" + typeof(T) + "没有存在在map字典内!"); 36 return; 37 } 38 list.Remove(typeof(T)); 39 } 40 41 /// <summary> 42 /// 判断某个类型是否可转换 43 /// </summary> 44 /// <param name="type"></param> 45 /// <returns></returns> 46 public bool IsTransition(Type type) 47 { 48 if (list.Contains(type)) 49 { 50 return true; 51 } 52 return false; 53 } 54 55 /// <summary> 56 /// 状态是否启用 57 /// </summary> 58 public bool isActive 59 { 60 get { return machine.IsCurrentState(GetType()); } 61 } 62 63 /// <summary> 64 /// 获取控制当前状态的状态机 65 /// </summary> 66 public MachineBehaviour machine 67 { 68 get; 69 internal set; 70 } 71 72 /// <summary> 73 /// 状态初始化 74 /// </summary> 75 public virtual void Initialize() 76 { 77 78 } 79 /// <summary> 80 /// 进入状态时执行 81 /// </summary> 82 public virtual void Enter() 83 { 84 85 } 86 /// <summary> 87 /// 状态Update时执行 88 /// </summary> 89 public virtual void Execute() 90 { 91 92 } 93 /// <summary> 94 /// 退出状态时执行 95 /// </summary> 96 public virtual void Exit() 97 { 98 99 } 100 /// <summary> 101 /// 状态FixedUpdate时执行 102 /// </summary> 103 public virtual void FixedExecute() 104 { 105 106 } 107 /// <summary> 108 /// 状态LateUpdate时执行 109 /// </summary> 110 public virtual void LateExecute() 111 { 112 113 } 114 115 public virtual void OnCollisionEnter(Collision collision) 116 { 117 118 } 119 public virtual void OnCollisionExit(Collision collision) 120 { 121 122 } 123 public virtual void OnCollisionStay(Collision collision) 124 { 125 126 } 127 public virtual void OnTriggerEnter(Collider collider) 128 { 129 130 } 131 public virtual void OnTriggerExit(Collider collider) 132 { 133 134 } 135 public virtual void OnTriggerStay(Collider collider) 136 { 137 138 } 139 }