在游戏植物大战僵尸里,植物卡片一般会有三种状态,分别是冷却、不可用(缺乏阳关)和可用状态。(完整源码直接放在文章最后)
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呀,有什么不妥的后面再改,本期先这样了。