最终效果
系列导航
文章目录
- 最终效果
- 系列导航
- 前言
- 僵尸
- 配置僵尸动画
- 移动
- 断头
- 攻击
- 死亡
- 源码
- 完结
前言
本节主要实现配置僵尸动画,移动,断头,攻击,死亡功能。
僵尸
配置僵尸动画
普通动画
无头动画,新增覆盖图层
需要注意的是,僵尸死亡记得去掉过度自动的勾选,不然死亡动画会一直重复播放
移动
新增Zombie
public class Zombie : MonoBehaviour
{public Vector3 direction; //移动方向public float speed;//速度void Update(){transform.position += direction * speed * Time.deltaTime;}
}
效果
断头
新增断头动画,配置预制体
修改Zombie,比如我们希望僵尸50血开始断头
private Animator animator;
private Character character;
public GameObject lostHead;//断头预制体
private Transform head;//断头位置
private bool isLostHead;//是否已经断头private void Start()
{animator = GetComponent<Animator>();character = GetComponent<Character>();head = transform.Find("Head");currentSpeed = speed;
}void Update()
{//移动transform.position += direction * currentSpeed * Time.deltaTime;//断头if (character.currentHealth <= 50 && isLostHead == false){isLostHead = true;Instantiate(lostHead, head.position, Quaternion.identity);animator.SetBool("headless", true);}
}
配置
并在断头预制体新增脚本LostHead,一段时间后销毁
public class LostHead : MonoBehaviour
{public float existenceTime = 3f;//存在时间private void Start(){Destroy(gameObject, existenceTime);}
}
效果
攻击
修改Zombie
//进入触发器
private void OnTriggerEnter2D(Collider2D other)
{if (!other.CompareTag("Plant")) return;animator.SetBool("attack", true);currentSpeed = 0;
}//离开触发器
private void OnTriggerExit2D(Collider2D other)
{if (!other.CompareTag("Plant")) return;animator.SetBool("attack", false);currentSpeed = speed;
}
记得修改僵尸刚体为永不休眠,不然可能
效果
死亡
植物和僵尸,甚至子弹其实都存在死亡,为了统一的进行管理,我们可以引用接口的定义
新增interface接口,定义OnDie死亡方法
public interface IInteractable
{// 死亡public void OnDie();
}
修改Character,调用对应接口的死亡方法
public void TakeDamage(Attack attacker)
{if (invulnerable) return;if (currentHealth - attacker.damage > 0)// 如果扣除伤害后生命值大于0{currentHealth -= attacker.damage;// 扣除伤害值StartCoroutine(InvulnerableTimer()); // 启动无敌状态计时器}else{currentHealth = 0;GetComponent<IInteractable>().OnDie();}}
修改Zombie,关联IInteractable接口,定义僵尸的死亡方法
public class Zombie : MonoBehaviour, IInteractable
{//。。。public void OnDie(){currentSpeed = 0;animator.SetBool("die", true);GetComponent<Collider2D>().enabled = false;Destroy(gameObject, 2f);}
}
同理,定义植物和子弹的死亡方法。记得同样关联IInteractable接口
public void OnDie()
{Destroy(gameObject);
}
僵尸死亡效果
植物死亡效果
源码
源码不出意外的话我会放在最后一节
完结
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,以便我第一时间收到反馈,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
好了,我是向宇
,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~