HealthStone”炉石传说“是一个2D卡牌游戏,一开始还以为是一个3D的呢。。。这个有点坑。
游戏设计:
1.开始界面:
开始界面有一个动画,一个button。动画是logo的出现动画,button,点击进入人物的选择界面
2.人物选择界面:
人物选择界面里边有人物列表,这些人物都有点击功能,当点击所选择的人物时,在界面的右边会显示你所选择的人物图片及其名字。在所选择的人物下边有一个开始游戏 的logo,点击这个logo后会进入对战界面,在这个过程中有一个简单的过度动画。
3.对战界面:
这个界面中有一个玩家和电脑对战。玩家有卡牌,出牌,水晶总数,可用水晶数,血量,水晶图片显示属性。电脑有卡牌,出牌,水晶总数,可用水晶数属性。卡牌都是随机发牌,玩家之尅一看到自己的牌,看不见电脑的,出牌的时候是根据出牌所需的水晶数和自己可用的水晶数来决定是否可以出牌的,如果可以出牌,只需用鼠标把牌拖动到指定的位置就可以,牌的顺序会根据牌的序号自动排列,如果不在这个位置拍会自动返回手中。场景中还有一个时间绳,用来记录时间,如果一个人出牌的时间超过约定时间则换对方出牌,此外亦可以通过点击来轮换出牌方,如果玩家出牌结束,时间还没有停止,既可以点击button”回合结束“换为对方出牌,然后电脑就会自动出牌。卡牌上边有三个属性:水晶crystal,伤害harm,血量hp,这三个属性书卡牌自带的。卡牌的发放是随机的。点击手中的卡牌还可以在界面的左边显示卡牌的属性,这个显示时间只有10秒左右。在界面的最左边还有一个卡牌的管理槽,这个槽中的卡牌是自上向下运动的。从上边自动出现,在最下边自动消失。
GameObject”游戏物体“:
一。01play
1.Welcome界面:
这个界面包括:logo,button”进入热内选择界面“,BackGround。
logo:是一个sprite,logo动画是由Tween控制的。这里边用的是Tween——>scale组件,这个是控制物体大小变化的,duration___seconds这个是控制动画持续时间的
BackGround:这个这是一个sprite
button:这个是一个label,因为要有相应点击的功能,因此这个有BoxCollider,UI Button这两个unity自带的组件,同时boxcollider中的isTrigger和uILable中的auto--adjust
to match也要勾选上。另外这个button也是有一个动画的,这个动画是在logo出现之后播放的label的隐现动画,因此label要用到Tween——>Alpha组件这个组件是控制label的透明度的,因为这个动画一开始是不需要播放的,因此一开始是不选择的,之后要用叫本来控制。Tween里边有一个Playstyle选项,这个是播放动画的选择。这个label是需要点击事件的,要用一个脚本来控制,控制方法UIbutton(script)——>OnClick——>Notify(把这个label拖放进去)——>method(选择Button/OnClickSelect这个脚本是自己写的),这样就可以点击这个butotn了
点击button之后因为要进入人物选择界面,当前这个界面是不需要的,因此这个界面加一个动画让他自动移走,在人物选择界面价格动画,使其自动移入。这两个动画都是用Tween——>position来控制的,同时这两个动画也都是自己写脚本进行控制。
现在Welcome界面就完成了,将logo,button,BackGround都放入同一个父级物体里边。这个父级物体就叫Welcome。
2.bg_selectrole”人物选择界面“
这个界面包括:hero_name,Label(显示”select hero“),hero0”显示选择的英雄“,hero1~hero9”可以选择的英雄“
hero1”代表可以选择的英雄咯“:有点击功能,因此添加UI button,BoxCollider,因为需要9个英雄,所以就做一个预制体,其他的直接ctrl+D就可以了。
hero_name:这个是跟随英雄的图片一起的,显示在hero0的正下方,
label:在hero0的正上方
hero0:知识一个sprite没有起的控件
这里边的逻辑是在hero1的代码里边实现的
3.blank_mask”阻挡的黑板“:
在选择完英雄后会出现这个黑板,来作为Vs界面的背景,这个界面是由BlankMask脚本控制的
4.VS”对战人物的展示“:
包括子级物体:VS_sprite”VS两个字的图标“,hero1,hero2,”自己选择的人物和电脑选择的人物“
VS_sprite:只有一个Tween——>scale动画
hero1,hero2:只有Tween——>position动画
父级物体上边有一个VsShow脚本进行控制
二。02play
1.mine_hero,their_hero:
这两个都只是提供了一个初始的位置,在游戏开始的时候让选择的人物从这个位置运动到指定地点所以有一个Tween动画,还有一个hero脚本控制
2.player_situation,enemt_situation:
这两个是玩家的属性控制,player_situation里边有01——10是个水晶,enemy_situation里边是没有的,因为敌人 的属性是看不到的
3.Gamecontroal:
这个里边的Tocard,Fromcard他们的子级物体harm,hp都是自适应的,这个自适应要添加UI Anchor这个unity自带的脚本这样harm,hp两个label就可以跟着一起变化了,而且位置不会发生变化
Scripts”游戏脚本“:
public TweenPosition selectHeroTween;
public TweenPosition welcomeTween;
public UISprite mineHero;//定义成这个样子可以直接从面板中拖拽相应gameobject到检测面板的定义上
selectHeroTween.PlayForward ();
selectHeroTween.PlayReverse();//playerforward是播放动画,playreverse是往回播放动画
IEnumerator LoadPlaySence()
{
yield return new WaitForSeconds (10f); //这里是等到时间,等待10秒
Application.LoadLevel (1);//这个是加载场景1
}//这是一个协程,用这个函数的时候要:StartCoroutine (LoadPlaySence ());写成这个样子
协程大致可以分为两点:1).等待一个是剑之后执行之后的代码,2).等待某个操作完成之后再继续执行。总的来说协程就是代码在特定的时机执行。
public
static BlankMask _instance;//单例模式就是这个紧允许被实例化一次,可以保证他的唯一性,可以看成是全局的静态变量
void
Awake()
{
_instance = this; //把这个单例实例化,就是赋值,他挂在那个gameobject上this就是谁
this.gameObject.SetActive
(false);//这句话是说这个gameobject不显示,true就是显示
}//
private UILabel hpLabel;
private UILabel harmlabel;
hpLabel = transform.Find ("hpLabel").GetComponent<UILabel>
();
harmlabel = transform.Find ("harmLabel").GetComponent<UILabel>
();//定义一个公有的UIlabel在检视面板里边赋值,用transform.Find来找到label的名字,这个名字就是Hierarchy面板中的hplabel对应的名字
harmlabel.text = harm + "";//这个是改变Label里边的内容,后边的
"" 是把数字给变成字符
GameObject go = NGUITools.AddChild (this.gameObject,cardPrefabs);//这个是生成一个子物体在这个物体下
iTween.MoveTo (go,toCard.position,1f);//控制物体的运动,iTween很强大。。第一个参数是要移动的GameObject,第二个参数是要移动到的位置信息,第三个是移动的时间
int needCrysstal = this.GetComponent<card>().needCrystal;
mine_crystal myCrystal = GameObject.Find("player_situation").GetComponent<mine_crystal>();//Getcomponent获得这个物体的所有组件。
GameObject.Find("xxx")
transform.Fimd("xxx")::
GameObject 是在这个场景里边寻找某一个名字是"xxx"的物体,而trandform知识在子物体中进行寻找,如果要找一个孙物体就要写成"xxx/xxx"的格式
transform.parent.GetComponent<MyCard>().UpdateShow();//寻找这个物体的父级物体,并获得这个父级物体的所有属性
List集合定义
using System.Collections.Generic;//用List的时候要有这个头文件
private List<GameObject> cardList
= new List<GameObject>();//List的定义
cardLIst.Add(); //增加元素
cardList.Remove();//删除元素
cardList.RemoveAt();//移除指定位置的元素
Vector3 pos = new Vector3(card_01.position.x+myXoffset,card_01.position.y,card_01.position.z);//定义一个位置向量并进行赋值,赋值的时候new不可少
public enum GameState
{
CardGenerateing,//系统随机发放卡牌的阶段
PlayCard,//出牌对战的阶段
End//游戏结束阶段
}//enum就是一个枚举,列出所有的
private string[] heroNames = {
"吉安娜·普罗德摩尔",
"雷克萨",
"乌瑟尔?光明使者",
"加尔鲁什?地狱咆哮",
"玛法里奥?怒风",
"古尔丹",
"萨尔",
"安杜因?乌瑞恩",
"瓦莉拉?萨古纳尔"
};//数组定义及赋值
private string[] heroName; //
也可以不赋值,然后在检视面板里边赋值
int num = 10;
a.ToString("0"); == num + "";//都是把int型转成字符型
版权声明:本文为博主原创文章,未经博主允许不得转载。