当前位置:   article > 正文

【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版4(附带项目源码)_unity植物大战僵尸

unity植物大战僵尸

最终效果

在这里插入图片描述

系列导航

制作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;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

效果
在这里插入图片描述

断头

新增断头动画,配置预制体
在这里插入图片描述
修改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);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

配置
在这里插入图片描述

并在断头预制体新增脚本LostHead,一段时间后销毁

public class LostHead : MonoBehaviour
{
    public float existenceTime = 3f;//存在时间

    private void Start()
    {
        Destroy(gameObject, existenceTime);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

效果
在这里插入图片描述

攻击

修改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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

记得修改僵尸刚体为永不休眠,不然可能
在这里插入图片描述

效果
在这里插入图片描述

死亡

植物和僵尸,甚至子弹其实都存在死亡,为了统一的进行管理,我们可以引用接口的定义

新增interface接口,定义OnDie死亡方法

public interface IInteractable
{
    // 死亡
    public void OnDie();
}
  • 1
  • 2
  • 3
  • 4
  • 5

修改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();
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

修改Zombie,关联IInteractable接口,定义僵尸的死亡方法

public class Zombie : MonoBehaviour, IInteractable
{
	//。。。

	public void OnDie()
    {
        currentSpeed = 0;
        animator.SetBool("die", true);
        GetComponent<Collider2D>().enabled = false;
        Destroy(gameObject, 2f);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

同理,定义植物和子弹的死亡方法。记得同样关联IInteractable接口

public void OnDie()
{
    Destroy(gameObject);
}
  • 1
  • 2
  • 3
  • 4

僵尸死亡效果
在这里插入图片描述
植物死亡效果
在这里插入图片描述

源码

源码不出意外的话我会放在最后一节

结束

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/770418
推荐阅读
相关标签
  

闽ICP备14008679号