using UnityEngine; using UnityEngine.Events; public class ChangeMat : MonoBehaviour { //自身 public Material matAttack_Self;//攻击 public Material matDie_Self;//死亡 public Material matGetHit_Self;//被攻击 public Material matMove_Self;//移动 //敌人 public Material matAttack_Oppo;//攻击 public Material matDie_Oppo;//死亡 public Material matGetHit_Oppo;//被攻击 public Material matMove_Oppo;//移动 private bool isSelf; private MeshRenderer m_renderer; FsmManager fsmManager; private void Awake() { m_renderer = transform.Find("Mat").GetComponent(); } private void ChangeState(sbyte stateIndex) { fsmManager.ChangeState(stateIndex); } void Update() { fsmManager.Update(); } UnityAction checkCallBack; UnityAction dieCallBack; public void SetSelf(bool isSelf,UnityAction checkAC,UnityAction dieAC) { this.isSelf = isSelf; fsmManager = new FsmManager((byte)AnimaState.MaxValue); EnemyMove tmpMove = new EnemyMove(m_renderer, isSelf ? matMove_Self : matMove_Oppo); fsmManager.AddState(tmpMove); EnemyAttack tmpAttack = new EnemyAttack(m_renderer, isSelf ? matAttack_Self : matAttack_Oppo, AfterAttack); fsmManager.AddState(tmpAttack); EnemyGetHit tmpGetHit = new EnemyGetHit(m_renderer, isSelf ? matGetHit_Self : matGetHit_Oppo, AfterGetHit); fsmManager.AddState(tmpGetHit); EnemyDie tmpDie = new EnemyDie(m_renderer, isSelf ? matDie_Self : matDie_Oppo, AfterDie); fsmManager.AddState(tmpDie); checkCallBack = checkAC; dieCallBack = dieAC; SetMove(); } //移动 public void SetMove() { if (m_renderer != null) { ChangeState(0); } } //攻击 public void SetAttack() { if (m_renderer != null) { ChangeState(1); } } private void AfterAttack() { checkCallBack(); } //被攻击 public void SetGetHit() { if (m_renderer != null) { ChangeState(2); } } private void AfterGetHit() { SetMove(); } //matDie_Oppo public void SetDie() { if (m_renderer != null) { ChangeState(3); } } private void AfterDie() { dieCallBack(); } }