本次完成祭祀僵尸的制作
代码
该僵尸被攻击的次数达到一定数值时,会自杀献祭自己,周围僵尸的速度一定时间获得提高,克制高频低伤害植物,被低频高伤害克制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class SacrificeZombie : ZombieBase
{
//该僵尸被攻击的次数达到一定数值时,会自杀献祭自己,周围僵尸的速度一定时间获得提高,克制高频低伤害植物
//被低频高伤害克制
protected override int MaxHP => 470;
protected override float speed => 2;
protected override float attackValue => 100;
protected override GameObject Prefab => GameManager.Instance.GameConf.Sacrifice;
protected override bool isSpecial => false;
private bool isSacrifice = false;
// public override Vector2 offset => new Vector2(1.03f, -0.51f);
public override void SpecialMove()
{
return;
}
public override void InitZombieHpState()
{
zombieHpState = new ZombieHpState(
0,
new List<int>() { MaxHP,300, 100 },
new List<string>() { "Sacrifice_Walk", "Sacrifice_Walk", "Sacrifice_Walk" },
new List<string>() { "Sacrifice_Attack", "Sacrifice_Attack", "Sacrifice_Attack", },
new List<UnityAction>() { null,CheckSacrifice, CheckSacrifice }
);
}
public override void OnDead()
{
isSacrifice = false;
if (!isSpecialDie) //如果不是特殊死法
{// 创建一个死亡身体
Sacrifice_DieBody body = PoolManager.Instance.GetObj(GameManager.Instance.GameConf.Sacrifice_Diebody).GetComponent<Sacrifice_DieBody>();
body.Init(animator.transform.position);
}
}
private void CheckSacrifice()
{
if (!isSacrifice&&hurtNum>=5)
{
// 已经自杀
isSacrifice = true;
// 播放自杀动画
animator.Play("Sacrifice");
StartCoroutine(CheckSacrificed());
}
}
IEnumerator CheckSacrificed()
{
while (true)
{
yield return new WaitForSeconds(0.05f);
if (animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1)
{
//给周围僵尸加速
DoSpeedUp();
AudioManager.Instance.PlayEFAudio(GameManager.Instance.GameConf.Kill); //自杀音效
//自己死亡
Hurt(1800);
}
}
}
private void DoSpeedUp()
{
// 找到可以被我加速的僵尸
List<ZombieBase> zombies = ZombieManager.Instance.GetZombies(transform.position , 25f);
if (zombies == null) return;
for (int i = 0; i < zombies.Count; i++)
{
zombies[i].SpeedUp(); //加速
}
}
}