基于Unity的Web游戏设计与实现

时间:2022-10-30 08:36:56

基于Unity的Web游戏设计与实现

摘 要:Unity是一个用于创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的综合型创作工具。Unity是一个游戏开发生态系统:强大的渲染引擎,完全集成一整套直观工具和快速工作流程,可以创建互动式3D、2D内容;文章以一款翻转匹配记忆游戏为例,从游戏的策划构思设计和程序具体实现等进行介绍。游戏开发人员可以基于此文章,利用Unity开发多平台的游戏。

关键词:Unity;C#;用户图形界面;翻转匹配记忆游戏

中图分类号:TP311.52

对于独立开发者和工作室,Unity做为大众化开发系统,扫除了创造独特游戏的时间和成本上的障碍。使用Unity可以在创建在任意平台上(Web Player,PC,MAC,Linux,iOS,Android等)吸引和愉悦玩家的游戏。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)

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:///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.

[4]优美缔软件(上海)有限公司.Unity4.X从入门到精通[M].北京:中国铁道出版社,2013.

作者简介:俞亮(1984-),男,四川绵阳人,计算机科学与技术专业,助教,硕士研究生,研究方向:数字娱乐技术、计算机动画、人工智能;俞文心,男,四川绵阳人,博士后研究员,博士研究生,研究方向:3D图像合成、立体视差估算、兼容快速编码、H.264编解码。

作者单位:西南科技大学 计算机科学与技术学院,四川绵阳 621010;早稻田大学 情报生产系统研究院,日本福冈 807-0815

上一篇:高等工程教育与高等职业教育的同质性 下一篇:报纸传媒应对互联网挑战的思路探讨