赞
踩
制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版13(完结)
制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版12
制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版11
制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版10
制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版9
制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版8
制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版7
制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版6
制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版5
制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版4
制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版3
制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版2
制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版1
本节主要实现配置僵尸动画,移动,断头,攻击,死亡功能。
普通动画
无头动画,新增覆盖图层
需要注意的是,僵尸死亡记得去掉过度自动的勾选,不然死亡动画会一直重复播放
新增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是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。