unity3d-学习笔记20-卡牌游戏制作
实现在前面设置的GamePass场景中点击需要战斗的事件跳转到战斗场景
思路
在GamePass场景中点击需要战斗的事件,获得该事件的boss数据,并且需要删掉这个数据,让后面从战斗场景中回来的时候的事件不再重新出现已经点击了的事件
在战斗场景的桌面类对boss血量判定结束后对boss的类型进行判断,如果不是最后一只boss,则挑战到GamePass场景中
代码
明天写
2021.3.2
实现
IEnumerator Disappear()
{
//判断当前的事件是不是战斗的,是的话就要保存当前场景的事件,然后跳转到对应的战斗场景
int eventNum = int.Parse(transform.GetChild(0).GetChild(0).GetComponent<Image>().sprite.name);
if (eventNum!=1 && eventNum != 3 && eventNum != 5 && eventNum != 7 && eventNum != 9 && eventNum != 10 && eventNum != 12 && eventNum != 15)
{
one.DOFade(0, 1);
yield return new WaitForSeconds(1f);
StaticRes.pics.RemoveAt(index);
//Desktop.des.RemoveAt(index);
StaticRes.texts.RemoveAt(index);
isUpdate = true;
}
else
{
one.DOFade(0, 1);
yield return new WaitForSeconds(1f);
all.DOFade(0,1);
yield return new WaitForSeconds(1f);
StaticRes.texts.RemoveAt(index);
StaticRes.pics.RemoveAt(index);
if (eventNum == 1)
{
eventNum = 0;
}
if (eventNum == 3)
{
eventNum = 1;
}
if (eventNum == 5)
{
eventNum = 2;
}
if (eventNum == 7)
{
eventNum = 3;
}
if (eventNum == 9)
{
eventNum = 4;
}
if (eventNum == 10)
{
eventNum = 5;
}
if (eventNum == 12)
{
eventNum = 6;
}
if (eventNum == 15)
{
eventNum = 7;
}
CardDesktop.bossSpritePath = eventNum;
SceneManager.LoadScene("FightScene");
}
}
在点击脚本中获得当前物体的图和文本, 从而获得他在数据库中的索引位置,然后删掉这个索引,让桌面类去更新出现的事件,判断如果是战斗的事件,则在删掉索引后,直接进入战斗的界面即可,,当然是要先获得对应boss的数据
下面这个是我写死在程序里的数据
public string text1 = "手持节杖" + "\n" + "穿着朴素的牧衣" + "\n" + "但眼神好像充满了智慧";
public string text2 = "获得角色装备卡";
public string text3 = "头戴兜帽" + "\n" + "双手持匕首" + "\n" + "看上去不怀好意";
public string text4 = "太热了" + "\n" + "可以丢掉部分无用物品" + "\n" + "继续前行";
public string text5 = "眼冒红光" + "\n" + "它露出了尖锐的牙齿";
public string text6 = "太热了" + "\n" + "休息一会整理一下物品" + "\n" + "再继续前行";
public string text7 = "手提着灯的老者" + "\n" + "身披长袍";
public string text8 = "到达墨丘利的背面" + "\n" + "穿上对抗寒冷的" + "\n" + "防护装置";
public string text9 = "凶猛的野兽" + "\n" + "扑过来了......";
public string text10 = "行动敏捷的小偷" + "\n" + "如果不小心的话" + "\n" + "就会被偷走东西";
public string text11 = "丢弃无用的物品吧";
public string text12 = "两条巨大的蟒蛇" + "\n" + "出现在眼前" + "\n" + "它们张开了血盆大口" + "\n" + "朝着这边发出嘶嘶的叫声";
public string text13 = "丢弃无用的物品吧";
public string text14 = "这里的东西或许可以" + "\n" + "帮我们更好了解" + "\n" + "这个星系发生的事情";
public string text15 = "“你们上当了呢”";
public static List<string> texts = new List<string>();
public static List<int> pics = new List<int>();
private void Awake()
{
texts.Add(text1);
texts.Add(text2);
texts.Add(text3);
texts.Add(text4);
texts.Add(text5);
texts.Add(text6);
texts.Add(text7);
texts.Add(text8);
texts.Add(text9);
texts.Add(text10);
texts.Add(text11);
texts.Add(text12);
texts.Add(text13);
texts.Add(text14);
texts.Add(text15);
for (int i = 1; i < 16; i++)
{
pics.Add(i);
}
}
修改之前桌面类的更新事件的方法,把取出数据的集合换成数据库里的集合让他自己遍历就可以了
总结:这个功能看起来简单,但是充分体现了代码高聚低藕的重要性,光是重新看这个很久之前写的代码就花费了很多时间(其实也不多),就是没什么必要,所以这个在后面是需要注意的,当然和自己想的不周到也有关系。希望后面能多考虑迭代的时候怎么最小化改动已经写好了的代码
添加战斗结束的判定和界面——————完成
把战斗的界面统一到所有需要战斗的事件里——————完成
添加除战斗界面的其他事件界面
boss简单的攻击模式(也要能打出卡的)
ui,原画等精细优化
画面一侧要有出牌的记录
人物的buff图标
能量卡的消耗需要可视化———————完成