基于Unity 3D的卡牌游戏的设计与开发外文翻译资料

 2022-08-06 11:43:43

英语原文共 8 页,剩余内容已隐藏,支付完成后下载完整资料


外文翻译 | 1401160230 | 徐畅

基于Unity 3D的卡牌游戏的设计与开发

Yucong Pana, Kun Wangb, Hanqi Shaoc, Zhenghe Chend, Wenli Donge, Xin Wangf

北京邮电大学 数字媒体与设计艺术学院,北京

作者邮箱略

关键词:Unity 3D; 协程; 角色扮演游戏; 卡牌游戏

摘要:纸牌游戏起源于两个或两个以上的人玩的桌上角色扮演牌游戏。玩家在游戏背景的范围内进行角色扮演,并使用基于回合制策略的纸牌玩游戏。纸牌游戏是中国手机游戏市场的主流,由于其非实时性,它们在编码方面与普通游戏有很大不同:很大一部分计算不是在Update()中完成的,而是使用Unity中的方便功能协程解决。此论文详细介绍了一款名为“命运之投”的纸牌游戏的开发过程,包括游戏设计,编程,界面设计,纸牌模型和映射等。 其中,编程是整个游戏的关键部分。 如何利用协作方便地实现游戏的许多功能是技术环节上的创新。

1、引言

命运之投是一款以纸牌为叙事核心的角色扮演游戏。每次您抓牌时,您都会遇到一个故事或遇到一些需要玩家参与的事件。有可能会遇到一定数量的敌人,也可能需要做出一些决定。抽出最后一张纸牌后,您将进入最后一战并知道故事的结局。此游戏一共有三个结局,这取决于您在游戏中所做的决定。如果您耗尽生命或被敌人击败,您将失败。游戏中的战斗和选择基本上是使用桌面上的六个骰子完成的。 每个骰子上都有三种不同的模式:剑,盾和闪电。他们分别代表攻击,防御和充能。为了防止结果过于依赖运气,我们为玩家设置了重置机制。完成第一个掷骰后,您可以锁定任意数量的所需骰子,并重投其他骰子。

2、游戏设计

2.1 战斗系统

命运之投的战斗系统基本上类似回合制游戏。为了赢得这场战斗,您需要审慎决定如何处理每次掷骰的结果。如前所述,每个骰子有三种不同的模式。以下详细介绍它们的功能。

(1)防御:如果您通过掷骰获得了一个盾牌,那么您将获得一个防御点。之后,您将获得一个吸收伤害盾牌,该盾牌等于您的护甲乘以防御点。每一回合开始时,防御点都会被清除。

(2)充能:骰子上显示的闪电代表一个充能点,当您在充能条上填充满10个充能点时,您可以使用独特的技能“正义之剑”,它将极大地伤害一个敌人并为您提供吸收伤害的盾牌。

(3)攻击:剑指的是攻击点,将您的骰子投下后,您就可以使用攻击点攻击敌人。 每次攻击将花费一个攻击点并造成特定敌人的伤害,您的攻击能力取决于您的攻击能力。

玩家回合结束后,将有一个敌人回合,每个敌人将攻击该玩家,其伤害也取决于他们的攻击力。如果可能的话,一些敌人将使用他们的特殊技能来严重伤害玩家。 然后又会有另一个玩家回合。

2.2 卡的内容

游戏的卡组总共包含约25张卡牌:

1.一套起始卡牌,旨在介绍游戏的故事和角色。

2.两套分集卡牌,其中包括一些选择,将对故事的结局产生重大影响。并且它也可能影响您角色的状态。

3.一套结局卡牌,其中列出了您所达到过的结局。故事的结局完全取决于您之前所做的选择。

4.剩下的卡称为基本卡牌,可以分为敌人卡,事件卡和藏宝卡:

“敌人卡”表示您遇到了一些必须击败的敌人。它将启动游戏的战斗系统。“事件卡”将触发特殊事件,这可能会为玩家提供一些选择。尽管无论您选择什么,它都不会影响您的结局,但可能会改变角色的状态,例如攻击力或健康状况,无论是正面还是负面。至于“藏宝卡”,它将为您提供打开宝藏盒的机会。但是,里面的宝藏也可能对您的角色产生某些有害影响。

玩家开始新游戏后,系统将自动生成一张纸牌序列,该序列确定您将抽出的纸牌顺序。因此,玩家进行一局和之前玩过的完全相同的游戏的可能性很小。

3. 代码设计

3.1 关于协程:

由于其特殊性,卡牌游戏与普通的实时格斗游戏有很大的不同。在实时战斗中,很大一部分计算是通过Update()完成的,但是对于卡牌游戏(如“回合制”游戏),我们需要在Unity中使用一个非常方便的功能:协程。

什么是协程? Unity中的协程是可以暂停执行,在暂停后立即返回并继续执行直到功能完成的函数。这就像一个子线程单独出现,以较少的消耗处理一些问题,但是MonoBehaviour提供的主线程中只能有一个正在运行的协程。

协程的特点是:

1.当协程程序遇到中断指令(yield return)时,它将暂停。

2.一旦协程的执行被挂起,它将立即返回到主要功能。然后,它在暂停后继续执行协程的其余功能。

3.中断指令完成后,协程将在中断指令的下一行继续执行。

4.在同一时间一个脚本实例可能具有多个挂起的协程,但只有一个正在运行的协程。

5.协程中的函数主体完成后,协程结束。

6.协程可以在一定数量的帧后轻松控制行为。

7.协程在性能上相比一般功能几乎没有更多的消耗。

3.2 如何建立一个协程

IEnumerator MethodName(object Parameter1,object Parameter2,...)
{
emsp;emsp;//to do sth
emsp;emsp;yield return YieldInstruction;
emsp;emsp;//to do sth else
}

图1. 如何建立一个协程

使用关键字IEnumerator来建立一个协程,然后使用StartCoroutine(IEnumerator惯例)。您也可以使用StopCoroutine()或是StopAllCoroutine()来终止协程。

3.3 关于中断指令

表1. 中断指令

使用说明

描述

实作

WaitForSeconds

等待指定的秒数

Yield return new WaitForSeconds(2);

WaitForFixedUpdate

等待固定帧

Yield return new WaitForFixedUpdate();

WaitForEndOfFrame

等待一帧的结束

Yield return new WaitForEndOfFrame();

StartCoroutine

启动新的协程并等待其结束。

Yield return StartCoroutine(other coroutine);

WWW

等待加载完成

Yield return www;

例如,如果使用yield return new WaitForSeconds(0.8f),协程将暂停0.8秒,然后继续执行。 如果您使用yield return StartCoroutine(OtherCoroutine()),则将启动新的协程,并且在完成新协程后将继续执行。 由于其灵活性,我们可以在游戏开发过程中简单地实现许多困难的目标。 这里有一个例子:

IEnmerator GameMainProcess()
{
emsp;emsp;//Wait for game to start
emsp;emsp;while (!gameStart)
emsp;emsp;{
emsp;emsp;emsp;emsp;yield return null;
emsp;emsp;}
emsp;emsp;//Main process
emsp;emsp;while(!gameEnd)
emsp;emsp;{
emsp;emsp;emsp;emsp;CanSelectCard = true;
emsp;emsp;emsp;emsp;AnimationManager.instance.CardHighlight(CanSelectCard);
emsp;emsp;emsp;emsp;isSelecting = true;
emsp;emsp;emsp;emsp;while (isSelecting)
emsp;emsp;emsp;emsp;{
emsp;emsp;emsp;emsp;emsp;emsp;yield return null;
emsp;emsp;emsp;emsp;}
emsp;emsp;emsp;emsp;yield return new WaitForSeconds(0.5f);
emsp;emsp;emsp;emsp;if(currentNum==1 || currentNum==5 || currentNum==7 || currentNum==14 || currentNum==15 || currentNum==20)
emsp;emsp;emsp;emsp;emsp;emsp;//Start the Coroutine to handle battle system
emsp;emsp;emsp;emsp;emsp;emsp;yield return StartCoroutine(Battle());
emsp;emsp;emsp;emsp;else if(currentNum==29 || currentNum==32 || currentNum==35)
emsp;emsp;emsp;emsp;{
emsp;emsp;emsp;emsp;emsp;emsp;GameEnd();
emsp;emsp;emsp;emsp;}
emsp;emsp;emsp;emsp;else
emsp;emsp;emsp;emsp;emsp;emsp;//Start the Coroutine to trigger an event
emsp;emsp;emsp;emsp;emsp;emsp;yield return StartCoroutine(GameEvent());
emsp;emsp;}
}

图2. 协程例子

3.4 服务器和数据库

图3.连接工作

为了实现云存储和服务器数据处理,我们使用Photon Server,Visual Studio和MySQL来构建服务器和数据库。

首先,我们应该设置Photon Server并确保配置了相应的Photon Server运行时环境。然后,我们可以使用Visual Studio构建服务器,以通过Unity游戏控制台实现其相应的连接和数据传输功能。在MySQL数据库建立之后,我们可以通过MySQL创建数据库列表,该列表存储用户登录信息,角色状态信息和等级信息。如此我们可以通过服务器读取它们。Photon Server和MySQL之间的数据传输通过NHibernate将数据库存储列表映射到服务器,然后通过服务器添加,删除和更改MySQL中存储的数据,然后实现相应的功能。Unity和Photon Server之间的网络连接和数据传输。在Unity游戏方面,通过访问服务器的IP地址来连接服务器,并实现两者之间的数据传输功能。

4. 美术

4.1 用户界面

由于龙是游戏的终极BOSS,因此我们选择与龙匹配的图片来匹配场景,同时增加神秘的氛围,调整色调,使整个背景更加统一。

图4.游戏背景

图5.按钮

图6. 登录界面

4.2 卡牌建模

卡牌建模是在MAYA中完成的。在早期,它是传统概念中的矩形薄游戏卡。为了追求逼真的效果并将其与整个游戏风格相匹配,我们尝试了四个卡角的倒角圆度、反复测试倒角的程度。最后,我们确定了下图所示的画像。

图7.卡牌3D模型

在MAYA中,我们应用卡片3D模型地图分割,将UI映射导出为PNG,然后在PhotoShop中进行绘制。这就是我们完成模型映射工作的方式。 下图显示了要测试的未映射的空白卡UI图像(左)和映射的卡UI图像(右)。

图8.卡牌纹理

4.

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[254221],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。