对于独立开发者和工作室,Unity做为大众化开发系统,扫除了创造独特游戏的时间和成本上的障碍。使用Unity可以在创建在任意平台上(Web Player,PC,MAC,Linux,iOS,Android等)吸引和愉悦玩家的游戏。
摘 要:Unity是一个用于创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的综合型创作工具。Unity是一个游戏开发生态系统:强大的渲染引擎,完全集成一整套直观工具和快速工作流程,可以创建互动式3D、2D内容;文章以一款翻转匹配记忆游戏为例,从游戏的策划构思设计和程序具体实现等进行介绍。游戏开发人员可以基于此文章,利用Unity开发多平台的游戏。
关键词:搜论文知识网,Unity,C#,用户图形界面,翻转匹配记忆游戏
Unity的游戏脚本为基于Mono的Mono脚本,一个基于.NET Framework的开源语言,因此程序员可用C#,JavaScript等加以编写。C#是微软推出的一种面向对象的高级编程语言,具有适合快速上手开发的优势。在介绍游戏实现也用C#代码进行补充说明。翻转匹配记忆类型游戏是一种考验记忆力的游戏,这种游戏不仅适合小孩,也可以锻炼成人的记忆力。本人以机器人修复游戏为例介绍如果在Unity引擎和C#语言的帮助下,开发用Web Player发布的网络游戏。
1 游戏设计
1.1 玩法介绍
玩家在背面向上(未知内容)的网格卡片里,通过翻开查看的方式寻找匹配的两张卡片,并且必须同时找出来。即玩家第一次翻转A卡片,第二次必须翻转与A卡片匹配的B卡片,如果翻转的是C卡片(不与A卡片匹配),则两张卡片再次翻转回去,呈现背面向上(未知内容)的形式。用机器人修复游戏说明,玩家修复机器人的意思是:玩家第一次翻开的是一种类型机器人的部分身体,下一次必须翻开的是这种类型机器人与之配对的另一部分身体,以此用来修复机器人。当翻转的卡片为配对卡片时,两张卡片从游戏区域移除,当玩家移除掉所有卡片后,游戏胜利。玩家通过不停的翻转卡片,在脑海里记忆卡片位置,从而快速找出配对卡片。
1.2 界面设计
1.2.1 游戏标题
在标题里需要有游戏名字,游戏基本背景说明,开始按钮。在这个标题里需要用图片的艺术形式来展现整体游戏风格,以此来吸引玩家。
1.2.2 游戏区界面
游戏区主要需要确定卡片的数量,考虑到以后的扩展设计(卡片数量能方便的调整),所以需要用动态加载卡片的方式进行加载。除此之外,因为游戏标题和游戏区界面是两个不同的场景显示,需要有双向的通道,在标题里有“开始按钮”做为通向游戏区的通道,在游戏区里需要有返回标题的按钮作为通道。
1.3 游戏关键判断逻辑
游戏的关键是消去配对的卡片。必须设定不让玩家翻转超过两张卡片,当玩家翻转第二张卡片后,进入判断流程:如果卡片相匹配,则消去两张卡片,如果不匹配,则翻转回未知状态。之后,继续翻转流程。
1.4 游戏性的探索
1.4.1 游戏声音运用
当卡片翻转成功后,需要有提示音反馈给玩家,以此来提示配对成功,增加游戏的体验。同时游戏进行时,增加了背景音乐来增强游戏性。
1.4.2 游戏时间限制
为了增加游戏紧张气氛和给予玩家一定的刺激度,可以增加限定时间的设置,规定玩家必须在限定时间里完成全部配对,当增加时间限定后,可以充分起到锻炼记忆力的目的。游戏里增加一个逐渐减少的时间条用以标识时间的流逝。
1.4.3 难度设置
为了让游戏适合不同能力的玩家,引入难度机制。难度机制可以让初级玩家和高级玩家体验到游戏的乐趣。
2 游戏主要功能实现及运行效果
2.1 卡片类实现
为了实现游戏逻辑,定义了Card类。isFaceUp表明卡片是否为翻开状态,游戏逻辑检测到这个状态时,会把卡片显示为翻开的状态。 isMatched表明卡片是否已经匹配成功,游戏逻辑检测到此状态时,在卡片位置显示一块白色区域,并且不能再被点击,表明卡片已被移走。img变量记录Assets里的资源文件的名字,用来指明显示图片。
设置相同的id变量在两张匹配的卡片里,为了匹配逻辑使用。
class Card:System.Object
{public bool isFaceUp=false;//检查是否为翻开状态
public bool isMatched=false;//检查是否匹配成功
public string img;//定义卡片显示的图片
public int id;//唯一标示卡片,为匹配卡片时使用}
2.2 随机性放置卡片
游戏一般在每次运行时,卡片区的卡片会有不同的顺序显示,需要实现随机功能来实现。在BuildDeck()函数里把需要显示的卡片数加载到Deck(卡片组)里,之后用Random.Range实现按照随机的顺序从Deck选出卡片。
BuildDeck();
for(int i=0;i for(int j=0;j int someNum= Random.Range(0,aCards.Count);
aGrid[i,j]=aCards[someNum];aCards.RemoveAt(someNum);}}
2.3 用户图形界面
用Unity自带GUI(用户图形界面)动态生成多个按钮形成卡片,行数(rows)和列数(cols)需要提前设定。代码位于OnGUI函数(程序每运行一帧会执行)中: for(int i=0;i for(int j=0;j Texture t= Resources.Load(strShow) as Texture;
if(GUILayout.Button(t,GUILayout.Width(cardW)))
{//按钮按下后处理逻辑}}}
2.4 游戏关键判断逻辑
游戏关键逻辑是限制每次只能点击2张不同的卡片,之后需要进行判断,用一个容器来获得这2张卡片,当下次再需要加入时,进行判断,拒绝加入。
//判断如果是选择的同一张图.不加入aCardsFlipped.
If (aCardsFlipped.IndexOf(each)<0){
aCardsFlipped.Add(each);}
if (aCardsFlipped.Count==2){
//如果有2个对象加入.不能再按键.
playerCanClick=false;}
2.5 选择Web Play发布
当游戏调试通过后,在File菜单里选择Build Setting进行设定,选择Web Player发布,当Unity图标在Web Player右侧时代表选中。游戏运行效果截图如下:
图1 Web Player发布
图2 游戏运行画面
3 结束语
该机器人修复游戏可以在任何安装Unity web player插件的网络浏览器里运行,因此具有跨平台的先天优势。除能实现基本的翻转游戏功能以外,还能实现限时,难度设置,声音提示等扩展功能。经过实验测试,界面美观,结果正确,各项功能达到游戏要求。该实现方法可以对其他基于Unity开发的Web游戏起到抛砖引玉的作用。作者已经发布游戏如下:读者可以进行参考。
http://www.kongregate.com/games/Moomlight/training-game
参考文献:
[1][美]ANDRE LAMOTHE.Windows游戏编程大师技巧[M].北京:中国电力出版社,2001.
[2][美]Ryan Henson Creighton.Unity 3D Game Development by Example Beginner's Guide[M].Packt Publishing Limited,2011.
[3][美]Will Goldstome.Unity 3.x游戏开发经典教程[M].北京:科学出版社,2013.