5.《植物大战僵尸》用脚本控制植物卡片的cd状态

  在游戏植物大战僵尸里,植物卡片一般会有三种状态,分别是冷却、不可用(缺乏阳关)和可用状态。(完整源码直接放在文章最后)

1.创建一个文件夹Scripts用来统一管理我们接下来要创建的脚本,在里面新建一个脚本 Card

2.在Mono类外声明一个枚举,在里面在里面声明植物三种状态,并将植物的默认状态设置为冷却状态

3.绑定植物卡片在不同状态下要调用的方法

植物卡片在不同状态下需要做到事是不一样的,所以我们可以在Update里实时监测卡片的状态,配合Swicth来判断等下植物卡片要调用哪个方法

4.绑定对象

在脚本里直接公开声明三个对象,分别绑定先前声明的Image:cardLight、cardGray、cardMask,记得要using UnityEngine.UI; 

写完记得 Ctrl + S 保存一下脚本

然后返回unity,给CardTemplate挂载刚刚的脚本,把CardTemplate的三个子对象分别拖到和其名字对应的脚本对象那里

5.设置卡片cd,实现动态效果

声明并初始化 冷却时间 和 计时器

然后对计时器进行累加,实时返回 fillAmount 的值,实现一个cd冷却的动态效果

最后在声明一个方法 TransitionToWaitingSun(),当计时器大于cd,就会调用该方法,实现植物卡片状态的改变,只展现植物卡片当前状态下的Image

源码如下

using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine;
using UnityEngine.UI;

enum CardState
{
    Cooling,       //冷却状态
    WaitingSun,    //缺乏阳光状态
    Ready          //可以状态
}
public class Card : MonoBehaviour
{
    //将植物的默认状态设为冷却状态
    private CardState cardState = CardState.Cooling;

    public GameObject cardLight;
    public GameObject cardGray;
    public Image grayMask;

    public float cdTime = 2.5f;   //植物的冷却时间
    private float cdTimer = 0;    //计时器
   
    void Update()
    {
        switch (cardState)
        {
            case CardState.Cooling:
                CoolingUpdate();
                break;
            case CardState.WaitingSun:
                WaitingSunUpdate();
                break;
            case CardState.Ready:
                ReadyUpdate();
                break;
            default:
                break;
        }
       
    }

    void CoolingUpdate()
    {
        cdTimer += Time.deltaTime;
        grayMask.fillAmount = (cdTime - cdTimer) / cdTime;

        if (cdTimer >= cdTime)
        {
           cdTimer = 0;  //重置计时器
           TransitionToWaitingSun();
        }
    }

    void WaitingSunUpdate()
    {

    }

    void ReadyUpdate()
    {

    }

    void TransitionToWaitingSun()
    {
        //改变植物卡片的状态
        cardState = CardState.WaitingSun;

        //隐藏另外两个Image
        cardLight.SetActive(false);
        cardGray.SetActive(true);
        grayMask.gameObject.SetActive(false);
    }
}

OK呀,有什么不妥的后面再改,本期先这样了。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值