实训2022"/>
项目实训2022
僵尸攻击完善
上次只是简单实现了攻击植物,这次将会完善僵尸攻击时的植物闪烁效果以及僵尸攻击逻辑优化和完善。
闪烁效果
//被攻击时调用变色函数public void Hurt(float hurtValue){hp -= hurtValue;StartCoroutine(ColorEF(0.2f,new Color(0.5f,0.5f,0.5f),0.05f,null));if(hp <=0){//死亡Dead();}}//实现变色效果protected IEnumerator ColorEF(float wantTime, Color targetColor, float delayTime, UnityAction fun){float currTime = 0;float lerp;while (currTime < wantTime){yield return new WaitForSeconds(delayTime);lerp = currTime / wantTime;currTime += delayTime;spriteRenderer.color = Color.Lerp(Color.white, targetColor, lerp);}spriteRenderer.color = Color.white;if (fun != null) fun();}
调整代码逻辑,使得僵尸可以在各种状态快速切换
//枚举僵尸状态
public enum ZombieState
{Idel,Walk,Attack,Dead}public ZombieState State{get => state;set{state = value;switch (state){case ZombieState.Idel://播放行走动画,但是卡在第一帧animator.Play(walkAnimationStr, 0, 0);animator.speed = 0;break;case ZombieState.Walk:animator.Play(walkAnimationStr);animator.speed = 1;break;case ZombieState.Attack:animator.Play("Zombie_Attack");animator.speed = 1;break;case ZombieState.Dead:break;}}void Update(){FSM();}//状态检测private void FSM(){switch (State){case ZombieState.Idel:State = ZombieState.Walk;break;case ZombieState.Walk:// 一直左走,并且遇到植物会攻击,攻击结束继续走Move();break;case ZombieState.Attack:if (isAttackState) break;Attack(currGrid.CurrPlantBase);break;}}//植物死亡时,把当前植物状态设为null,防止空引用异常private void Dead(){curgird.CurrPlantBase = null;Destroy(gameObject);}
更多推荐
项目实训2022
发布评论