僵尸攻击植物
此次将在上次僵尸行走的基础上加入攻击机制
加入攻击动画
攻击动画代码实现
private bool isAttackState;
private void Move()
{
if (currGrid == null) return;
if (isAttackState) return;
currGrid = GridManager.Instance.GetGridByWorldPos(transform.position);
//当网格中有植物并且植物在僵尸前面且距离足够近
if (currGrid.HavePlant && currGrid.CurrPlantBase.transform.position.x < transform.position.x
&& transform.position.x - currGrid.CurrPlantBase.transform.position.x < 0.3f)
{
Attack(currGrid.CurrPlantBase);
}
transform.Translate(new Vector2(-1.33f, 0) * (Time.deltaTime / 1) / speed);
}
private void Attack(plantBase plant)
{
isAttackState = true;
//播放攻击动画
animator.Play("Zombie_Attack");
}
植物被攻击时的代码实现
//攻击力
private float attackValue = 100;
//植物生命值
protected float hp;
public float Hp { get => hp; }
//传入伤害值,被攻击时调用
public void Hurt(float hurtValue)
{
hp -= hurtValue;
if(hp <=0)
{
//死亡
Dead();
}
}
//死亡摧毁植物
private void Dead()
{
Destroy(gameObject);
}
//伤害函数
IEnumerator DoHurt(plantBase plant)
{
//植物生命大于0 扣血
while(currGrid.CurrPlantBase.Hp>0)
{
plant.Hurt(attackValue/5);
yield return new WaitForSeconds(0.2f);
}
}