unity3d游戏开发论文(精选8篇)
unity3d游戏开发论文 篇1
在注册的时候,输入了数据库已存在的用户名,会显示用户已存在。
//验证用户是否存在
Users u = new Users().register(name);
if(name == u.Name)
{
name = “该用户已存在”;
a =GUI.Button(new Rect(600, 360, 40, 20), “注册”);
}
在登录的时候,当用户输入错误密码或用户名就会出现提示:
章来自狗刨学习网
代码部分:
如果用户名和数据库的不同
就提示:
print(“用户或密码错误”);
name = “";
password = ”";
flag = true;
这篇文章来自狗刨学习网
这篇文
unity3d游戏开发论文 篇2
UNITY游戏开发课程,在授课过程中,引导学生完成了一个小游戏的开发。虽然游戏的制作并不算复杂,但是也花了不少心思。下面将游戏的开发过程做一个简单的总结。
使用了一个插件:NGUI3.9.0,导入插件后,第一件事情不是开始制作游戏,而是改变默认的布局,因为默认的布局并不方便操作,尤其是使用NGUI插件以后。所以要把布局变成如图1所示的模样。将场景视图和游戏视图变成上下结构,这样场景中的游戏对象在游戏视图中的一览无余,操作和查看都非常方便。
2 游戏开发过程
在制作游戏之前,要熟悉NGUI插件,先做一个简单的游戏界面作为热身。首先,添加一个sprite(精灵)。要让这个精灵具有按钮的功能,(1)给它添加一个盒子碰撞器,那么它就具有了交互功能。(2)给这个精灵添加一个按钮脚本,这个时候,这个精灵才真正成为了一个按钮。(3)在按钮上添加一个文字:RED(红色)。对文字进行简单的字体、字号、颜色的设置。将文字标签设置为精灵的子元素,这样移动精灵的同时可以移动文字。将精灵复制两次,把文字分别改为:BLUE(蓝色)和GREEN(绿色)。(4)再创建一个精灵。效果如图2所示。
接下来要做的事情就是点击不同的按钮,让右边的精灵变成不同的颜色。给右边的精灵添加一个C#脚本,命名为:COLORController.代码如下:
点击第一个文字为红色的按钮,在属性窗口中找到ON Click点击事件窗口,将最后一个精灵拖入到Notify中,选择Method方法为:Make It Red;另外另个按钮做相同的操作,方法分别选择:Make It Blue和Make It Green。运行游戏,点击第一个按钮,右边的精灵变成红色;点击第二个按钮,精灵变成蓝色;点击第三个按钮,精灵变成绿色。这样就实现了第一个交互式的游戏。做到这一步就意味着对NGUI这个插件的基本运作方式已经了解了,接下来就可以做一个更加复杂的小游戏了。
首先在NGUI预设工具栏中选择一个背景,然后添加一个scroll view,再添加一个精灵。运行游戏时,可以发现当移动精灵到这个scroll view边界以外时,会出现这样的情景:
给精灵添加盒子碰撞器和一个drag scroll view脚本以后,再次运行游戏时,这个精灵就可以像冰块一样在scroll view里面左右滑动了。将这个精灵复制几个,并在scroll view中整齐的排列,再次运行游戏并拖拽精灵时,画面就更加有趣了。
接下来要做的事情就是能够将精灵拖拽出scroll view窗口。第一步,在scroll view中添加一个invisible widget,添加后默认命名为container;第二步,将5个精灵全部拖到container目录下;第三步,给container添加grid脚本,执行脚本时,脚本程序会将5个精灵重新排列,根据需要调整精灵之间的宽度;第四步,给5个精灵添加drag and drop item脚本;第五步,在UI Root下创建一个Panel,给Panel添加drag and drop root脚本。到这个时候,就可以把精灵拖拽出scroll view了,但是拖拽出去以后,放开鼠标时,精灵会自动回到container的最后一个格子中。在container的UIGrid窗口中勾选smooth tween选项时,精灵自动回位的动画会变得比较柔和,也会很明显地发现它的自动回位。还有既要让精灵能够在水平方向上滑动,又能进行拖拽而且不冲突的话,就要在精灵的drag and drop item脚本选项中的restriction中选择vertical,这意味着只允许垂直方向的拖拽操作,这样水平滑动,垂直方向拖拽,就很好了。精灵不能被拖拽出去是因为没有一个接收它的容器,所以还需要做一个容器接收它,才能顺利地拖拽。在UI Root下创建一个精灵,重命名为bg_sprite,选择一个透明的图片作为它的外形。
在UI Root下添加一个精灵,给精灵添加盒子碰撞器和drag and drop container脚本,就可以把scroll view中的精灵拖拽出来并放到新的精灵盒子当中了。接下来要做的事情就是复制一个一模一样的scroll view和container,然后将5个精灵从第一个scroll view拖到第二个scroll view或者从第二个scroll view拖到第一个scroll view,并且让5个精灵自动排列。第一步,将scroll view、container、bg_sprite分别重命名为:scroll view1、container1、bg_sprite1并且进行复制,复制后分别重命名为:scroll view2、container2、bg_sprite2,将container2中的5个精灵删除,这样就只有5个精灵在两个scroll view中移动;第二步,给bg_sprite2添加盒子碰撞器和drag and drop container脚本,将container2拖拽到bg_sprite2的drag and drop container脚本的reparent target选项中,就可以将5个精灵从第一个scroll view拖到第二个scroll view了;第三步,给bg_sprite1添加盒子碰撞器和drag and drop container脚本,将container1拖拽到bg_sprite1的drag and drop container脚本的reparent target选项中,就可以将5个精灵从第二个scroll view拖到第一个scroll view中了。
接下来,就可以依据这个已经实现的功能进行小游戏的创作了。首先可以设想,如果要做一个购物类的小游戏,将其中一个scroll view的外形变成购物篮,把5个精灵变成商品,那么,购物的小游戏就做成了。那么问题来了:如何将精灵的外形变成自己的图片呢?第一步,在互联网上找到合适的图片;第二步,在project视窗中的NGUI目录下的Example文件夹下新建一个文件夹,重命名为logo;第三步,将电脑上的图片拉入到logo文件夹中,然后在图片上点击右键,选择altas maker,打开altas maker窗口;第四步,选择add/update功能,将图片加入到altas图集;第五步,在精灵的属性窗口选择该图片,就可以将精灵的外形变成图片了。依据以上的思路和做法,还可以做成其他风格的小游戏。
完成了游戏的制作之后,最后一步就是发布游戏了。如果发布成单机版的电脑游戏,可以选择file-building and settings,选择PC,Mac&Linux Standalone,然后单击Build就可以将游戏发布成可执行文件了。
3 结语
这个小游戏是二维游戏,而UNITY3D的特色在于它的3D效果,希望在今后的教学过程中可以尝试三维游戏开发。
参考文献
unity3d游戏开发论文 篇3
关键词:Unity3D;Andoird;游戏开发
一、引言
Unity3D是由Unity Technologies开发的一个让开发者创建三维游戏、建筑可视化、实时三维动画等类型互动内容的跨平台的游戏开发工具,是一个整合度很高的专业游戏引擎。Unity可运行在Windows 和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone和Android平台,支持Mac 和Windows的网页浏览。由于Unity3D的跨平台和易用性等特性被越来越多的游戏开发公司所重视,并逐渐成为3D游戏开发的首先工具。
二、Unity3D界面介绍
Unity3D的基本界面层次清晰,几个窗口实现了全部的编辑功能。主界面如图1所示:
场景面板:该面板为Unity3D的编辑面板或者说是工作区;开发者可以将所有的模型、灯光、以及其他材质对象拖放到当前场景中,构建游戏中所能呈现的景象。
动画面板:该面板可以呈现完整的动画效果。显示的内容取决于场景摄像机的设置。当游戏在场景面板中编辑好后,点击运行按钮,即可在动画面板中查看游戏的实际运行效果。
■
项目面板:该面板主要功能是显示该项目文件中的所有资源列表。除了模型、材质、字体等,还包括该项目的各个场景文件。开发者可以将游戏中使用到的所有资源导入到该面板中,使用时只要用鼠标拖动到场景面板即可。
层次面板:该面板主要功能是显示放在场景面板中的所有的物体对象。该面板可以清楚查看在场景面板中出现的所有对象,很方便对场景中的对象进行管理。
对象属性栏:又叫检视面板,该面板栏会呈现出任何对象的属性和组件,包括三维坐标、旋转量、缩放大小、脚本的变量和对象等。
场景调整工具:可以改变在编辑过程中的场景视角、物体世界坐标和本地坐标的更换、物体的法线中心的位置,以及物体在场景中的坐标位置、缩放大小等。
三、接鸡蛋游戏的制作流程
一款手机游戏的开发大致经历立项、制定策划大纲、制作游戏、检测调试等过程。本文以接鸡蛋这个小游戏为例,描述Unity3D开发Andoird游戏的基本流程。
游戏的基本玩法是鸡蛋从屏幕上方落下,通过左右移动屏幕下方的木桶接住从上方落下的鸡蛋,鸡蛋落到木桶中及得分。游戏开发的基本步骤如下:
1.新建工程和场景
一个游戏就是一个项目,一个关卡就是一个场景,在Unity3D的文件菜单中选择新建项目,为新项目命名,如图2所示,新建项目的同时会新建第一个场景,保存新场景。
■
2.导入资源
游戏使用到的资源主要包括游戏对象模型、材质、贴图、声音等,模型可以在Maya,3DMax等3D建模工具中做好,导出为FBX格式的文件,然后在Unity3D的项目面板中选择导入资源菜单导入游戏资源。接鸡蛋主要模型资源有木桶、鸡蛋、草地、白云等模型。
3.搭建游戏场景
将游戏资源从项目面板拖入到场景面板中进行游戏场景的搭建,通过移动、缩放、旋转等工具将游戏资源对象按照一定的空间顺序进行搭建,最终效果如图3所示:
■
4.编写游戏脚本
(1)桶移动:PlayerScript.cs
木桶的左右移动是通过PlayerScript.cs来控制的,Unity3D的输入系统定义了水平方向的移动,并将X方向的数值限定在-2.5到2.5之间,这样避免木桶超出屏幕范围,代码的主要部分如下:
void Update () {
float moveInput = Input.GetAxis("Horizontal") * Time.deltaTime * 3; // 木桶在水平方向移动
transform.position += new Vector3(moveInput, 0, 0);
if (transform.position.x <= -2.5f || transform.position.x >= 2.5f){ // 限制木桶的移动范围
float xPos = Mathf.Clamp(transform.position.x, -2.5f, 2.5f); // 木桶在-2.5和2.5之间移动
transform.position = new Vector3(xPos, transform.position.y, transform.position.z);
}}
将PlayerScript.cs拖至木桶对象上,使得其成为木桶对象的脚本组件。
(2)鸡蛋落下:EggScript.cs
鸡蛋落下由EggScript.cs来控制,当鸡蛋落至屏幕下方足够低的地方的时候,鸡蛋自动销毁,以免占有资源,代码主要部分如下:
void Update () {
float fallSpeed = 2 * Time.deltaTime;
transform.position -= new Vector3(0, fallSpeed, 0);
if (transform.position.y < -1 || transform.position.y >= 20) // 位置足够低的时候销毁对象
{Destroy(gameObject);}}
同样将EggScript.cs拖至鸡蛋对象上,使得其成为鸡蛋对象的脚本组件之一。
(3)生成鸡蛋:SpawnerScript.cs
鸡蛋源源不断的从屏幕上方落下,即是通过SpawnerScript.cs脚本来生成鸡蛋,并且每隔0.3秒,鸡蛋的生成速度会不断的增加,主要代码如下:
void Update () {
if (nextEggTime < Time.time)
{
SpawnEgg();
nextEggTime = Time.time + spawnRate;
spawnRate *= 0.98f; // 生成速度逐渐加快
spawnRate = Mathf.Clamp(spawnRate, 0.3f, 99f);
}}
void SpawnEgg()
{
float addXPos = Random.Range(-1.6f, 1.6f); // 水平位置由随机函数产生的数值来生成
Vector3 spawnPos = transform.position + new Vector3(addXPos,0,0);
Instantiate(eggPrefab, spawnPos, Quaternion.identity); // 初始化鸡蛋
}
同样将EggScript.cs拖至鸡蛋对象上,也使得其成为鸡蛋对象的脚本组件之一。
(4)碰撞检测,计分:EggCollider.cs
在木桶底部有一个球体对象,设置为碰撞器,来检测鸡蛋是否与其发生碰撞,或者说来判断木桶是否接到了鸡蛋,如果碰撞到则进行计分,代码主要部分如下:void Awake()
void OnTriggerEnter(Collider theCollision) // 碰撞检测
{
GameObject collisionGO = theCollision.gameObject;
Destroy(collisionGO);
myPlayerScript.theScore++;// 本游戏中碰撞的物体只可能是鸡蛋,检测到即销毁鸡蛋对象,同时计分
}
将EggCollider.cs拖至球体碰撞器对象上,也使得其成为碰撞器对象的脚本组件。
5.发布游戏
游戏代码完成,测试无错后就可以发布成Android应用程序了,选择文件菜单>构建设置,在弹出的对话框中可以看见我们的游戏可以发布到多个平台上,这里我们选择Android,如图4所示:
■
在发布设置中,设置游戏名称、默认图标、Android版本等基本信息,最后点击构建按钮即可生成最终的Andoid打包文件,导入手机中就可以运行了。
四、结束语
本文通过一个小游戏的制作过程,描述了Unity3D的基本界面、基本操作和使用Unity3D开发游戏的基本流程。Unity3D不但可以开发3D游戏还可以开发2D游戏和其他大型网络在线游戏,同样是画面绚丽,效果出众。
做为一个成熟的游戏引擎和开发工具,Unity3D其开发能力毋庸置疑,随着iOS,Android手机的大量普及和3D网页游戏的兴起,Unity3D因其强大的功能、良好的可移植性和易用性在手机游戏和网页游戏平台上必将得到了广泛的使用和传播。
参考文献:
[1]Ryan Henson Creighton.Unity 3D Game Development by[J].Example Beginners Guide,2010(9).
[2]金玺曾.Unity 3D手机游戏开发[M].北京:清华大学出版社,2013.
if (transform.position.y < -1 || transform.position.y >= 20) // 位置足够低的时候销毁对象
{Destroy(gameObject);}}
同样将EggScript.cs拖至鸡蛋对象上,使得其成为鸡蛋对象的脚本组件之一。
(3)生成鸡蛋:SpawnerScript.cs
鸡蛋源源不断的从屏幕上方落下,即是通过SpawnerScript.cs脚本来生成鸡蛋,并且每隔0.3秒,鸡蛋的生成速度会不断的增加,主要代码如下:
void Update () {
if (nextEggTime < Time.time)
{
SpawnEgg();
nextEggTime = Time.time + spawnRate;
spawnRate *= 0.98f; // 生成速度逐渐加快
spawnRate = Mathf.Clamp(spawnRate, 0.3f, 99f);
}}
void SpawnEgg()
{
float addXPos = Random.Range(-1.6f, 1.6f); // 水平位置由随机函数产生的数值来生成
Vector3 spawnPos = transform.position + new Vector3(addXPos,0,0);
Instantiate(eggPrefab, spawnPos, Quaternion.identity); // 初始化鸡蛋
}
同样将EggScript.cs拖至鸡蛋对象上,也使得其成为鸡蛋对象的脚本组件之一。
(4)碰撞检测,计分:EggCollider.cs
在木桶底部有一个球体对象,设置为碰撞器,来检测鸡蛋是否与其发生碰撞,或者说来判断木桶是否接到了鸡蛋,如果碰撞到则进行计分,代码主要部分如下:void Awake()
void OnTriggerEnter(Collider theCollision) // 碰撞检测
{
GameObject collisionGO = theCollision.gameObject;
Destroy(collisionGO);
myPlayerScript.theScore++;// 本游戏中碰撞的物体只可能是鸡蛋,检测到即销毁鸡蛋对象,同时计分
}
将EggCollider.cs拖至球体碰撞器对象上,也使得其成为碰撞器对象的脚本组件。
5.发布游戏
游戏代码完成,测试无错后就可以发布成Android应用程序了,选择文件菜单>构建设置,在弹出的对话框中可以看见我们的游戏可以发布到多个平台上,这里我们选择Android,如图4所示:
■
在发布设置中,设置游戏名称、默认图标、Android版本等基本信息,最后点击构建按钮即可生成最终的Andoid打包文件,导入手机中就可以运行了。
四、结束语
本文通过一个小游戏的制作过程,描述了Unity3D的基本界面、基本操作和使用Unity3D开发游戏的基本流程。Unity3D不但可以开发3D游戏还可以开发2D游戏和其他大型网络在线游戏,同样是画面绚丽,效果出众。
做为一个成熟的游戏引擎和开发工具,Unity3D其开发能力毋庸置疑,随着iOS,Android手机的大量普及和3D网页游戏的兴起,Unity3D因其强大的功能、良好的可移植性和易用性在手机游戏和网页游戏平台上必将得到了广泛的使用和传播。
参考文献:
[1]Ryan Henson Creighton.Unity 3D Game Development by[J].Example Beginners Guide,2010(9).
[2]金玺曾.Unity 3D手机游戏开发[M].北京:清华大学出版社,2013.
if (transform.position.y < -1 || transform.position.y >= 20) // 位置足够低的时候销毁对象
{Destroy(gameObject);}}
同样将EggScript.cs拖至鸡蛋对象上,使得其成为鸡蛋对象的脚本组件之一。
(3)生成鸡蛋:SpawnerScript.cs
鸡蛋源源不断的从屏幕上方落下,即是通过SpawnerScript.cs脚本来生成鸡蛋,并且每隔0.3秒,鸡蛋的生成速度会不断的增加,主要代码如下:
void Update () {
if (nextEggTime < Time.time)
{
SpawnEgg();
nextEggTime = Time.time + spawnRate;
spawnRate *= 0.98f; // 生成速度逐渐加快
spawnRate = Mathf.Clamp(spawnRate, 0.3f, 99f);
}}
void SpawnEgg()
{
float addXPos = Random.Range(-1.6f, 1.6f); // 水平位置由随机函数产生的数值来生成
Vector3 spawnPos = transform.position + new Vector3(addXPos,0,0);
Instantiate(eggPrefab, spawnPos, Quaternion.identity); // 初始化鸡蛋
}
同样将EggScript.cs拖至鸡蛋对象上,也使得其成为鸡蛋对象的脚本组件之一。
(4)碰撞检测,计分:EggCollider.cs
在木桶底部有一个球体对象,设置为碰撞器,来检测鸡蛋是否与其发生碰撞,或者说来判断木桶是否接到了鸡蛋,如果碰撞到则进行计分,代码主要部分如下:void Awake()
void OnTriggerEnter(Collider theCollision) // 碰撞检测
{
GameObject collisionGO = theCollision.gameObject;
Destroy(collisionGO);
myPlayerScript.theScore++;// 本游戏中碰撞的物体只可能是鸡蛋,检测到即销毁鸡蛋对象,同时计分
}
将EggCollider.cs拖至球体碰撞器对象上,也使得其成为碰撞器对象的脚本组件。
5.发布游戏
游戏代码完成,测试无错后就可以发布成Android应用程序了,选择文件菜单>构建设置,在弹出的对话框中可以看见我们的游戏可以发布到多个平台上,这里我们选择Android,如图4所示:
■
在发布设置中,设置游戏名称、默认图标、Android版本等基本信息,最后点击构建按钮即可生成最终的Andoid打包文件,导入手机中就可以运行了。
四、结束语
本文通过一个小游戏的制作过程,描述了Unity3D的基本界面、基本操作和使用Unity3D开发游戏的基本流程。Unity3D不但可以开发3D游戏还可以开发2D游戏和其他大型网络在线游戏,同样是画面绚丽,效果出众。
做为一个成熟的游戏引擎和开发工具,Unity3D其开发能力毋庸置疑,随着iOS,Android手机的大量普及和3D网页游戏的兴起,Unity3D因其强大的功能、良好的可移植性和易用性在手机游戏和网页游戏平台上必将得到了广泛的使用和传播。
参考文献:
[1]Ryan Henson Creighton.Unity 3D Game Development by[J].Example Beginners Guide,2010(9).
unity3d游戏开发论文 篇4
以下是我们在紧凑的优化过程中提升游戏运行性能,并实现目标帧率时需要考虑的事项。--来自狗刨学习网
当基本游戏功能到位时,就要确保游戏运行表现能够达标。我们衡量游戏运行表现的一个基本工具是Unity内置分析器以及Xcode分析工具。使用Unity分析器来分析设备上的运行代码真是一项宝贵的功能。
我们总结了这种为将目标设备的帧率控制在60fps而进行衡量、调整、再衡量过程的中相关经
一、遇到麻烦时要调用“垃圾回收器”(Garbage Collector,无用单元收集程序,以下简称GC)
由于具有C/C++游戏编程背景,我们并不习惯无用单元收集程序的特定行为。确保自动清理你不用的内存,这种做法在刚开始时很好,但很快你就公发现自己的分析器经常显示CPU负荷过大,原因是垃圾回收器正在收集垃圾内存。这对移动设备来说尤其是个大问题。要跟进内存分配,并尽量避免它们成为优先数,以下是我们应该采取的主要操作:
1.移除代码中的任何字符串连接,因为这会给GC留下大量垃圾。
2.用简单的“for”循环代替“foreach”循环。由于某些原因,每个“foreach”循环的每次迭代会生成24字节的垃圾内存。一个简单的循环迭代10次就可以留下240字节的垃圾内存。
3.更改我们检查游戏对象标签的方法。用“if(go.CompareTag(“Enemy”)”来代替“if(go.tag == “Enemy”)”。在一个内部循环调用对象分配的标签属性以及拷贝额外内存,这是一个非常糟糕的做法。
4.对象库很棒,我们为所有动态游戏对象制作和使用库,这样在游戏运行时间内不会动态分配任何东西,不需要的时候所有东西反向循环到库中。
5.不使用LINQ命令,因为它们一般会分配中间缓器,而这很容易生成垃圾内存。
二、谨慎处理高级脚本和本地引擎C++代码之间的通信开销。
所有使用Unity3D编写的游戏玩法代码都是脚本代码,在我们的项目中是使用Mono执行时间处理的C#代码。任何与引擎数据的通信需求都要有一个进入高级脚本语言的本地引擎代码的调用。这当然会产生它自己的开销,而尽量减少游戏代码中的这些调用则要排在第二位。
1.在这一情景中四处移动对象要求来自脚本代码的调用进入引擎代码,这样我们就会在游戏玩法代码的一个帧中缓存某一对象的转换需求,并一次仅向引擎发送一个请求,以便减少调用开销。这种模式也适用于其他相似的地方,而不仅局限于移动和旋转对象。
2.将引用本地缓存到元件中会减少每次在一个游戏对象中使用 “GetComponent” 获取一个元件引用的需求,这是调用本地引擎代码的另一个例子。
三、物理效果
1.将物理模拟时间步设置到最小化状态。在我们的项目中就不可以将让它低于16毫秒。
2.减少角色控制器移动命令的调用。移动角色控制器会同步发生,每次调用都会耗损极大的性能。我们的做法是缓存每帧的移动请求,并且仅运用一次。
3.修改代码以免依赖“ControllerColliderHit” 回调函数。这证明这些回调函数处理得并不十分迅速。
4.面对性能更弱的设备,要用skinned mesh代替physics cloth。cloth参数在运行表现中发挥重要作用,如果你肯花些时间找到美学与运行表现之间的平衡点,就可以获得理想的结果。
5.在物理模拟过程中不要使用ragdolls,只有在必要时才让它生效。
6.要谨慎评估触发器的“onInside”回调函数,在我们的项目中,我们尽量在不依赖它们的情况下模拟逻辑。
7.使用层次而不是标签。我们可以轻松为对象分配层次和标签,并查询特定对象,但是涉及碰撞逻辑时,层次至少在运行表现上会更有明显优势。更快的物理计算和更少的无用分配内存是使用层次的基本原因。
8.千万不要使用Mesh对撞机。
9.最小化碰撞检测请求(例如ray casts和sphere checks),尽量从每次检查中获得更多信息。
四、让AI代码更迅速
我们使用AI敌人来阻拦忍者英雄,并同其过招。以下是与AI性能问题有关的一些建议:
1.AI逻辑(例如能见度检查等)会生成大量物理查询。可以让AI更新循环设置低于图像更新循环,以减少CPU负荷。
五、最佳性能表现根本就不是来自代码!
没有发生什么情况的时候,就说明性能良好。这是我们关闭一切不必要之物的基本原则。我们的项目是一个侧边横向卷轴动作游戏,所以如果不具有可视性时,就可以关闭许多动态关卡物体。
1.使用细节层次的定制关卡将远处的敌人AI关闭。
2.移动平台和障碍,当它们远去时其物理碰撞机也会关闭。
3.Unity内置的“动画挑选”系统可以用来关闭未被渲染对象的动画。
4.所有关卡内的粒子系统也可以使用同样的禁用机制。
六、回调函数!那么空白的回调函数呢?
要尽量减少Unity回调函数。即使敌人回调函数存在性能损失。没有必要将空白的回调函数留在代码库中(有时候介于大量代码重写和重构之间)。
七、让美术人员来救场
在程序员抓耳挠腮,绞尽脑汁去想该如何让每秒运行更多帧时,美术人员总能神奇地派上大用场。
1.共享游戏对象材料,令其在Unity中处于静止状态,可以让它们绑定在一起,由此产生的简化绘图调用是呈现良好移动运行性能的重要元素。
2.纹理地图集对UI元素来说尤其有用。
3.方形纹理以及两者功率的合理压缩是必不可少的步骤。
4.我们的美术人员移除了所有远处背景的网格,并将其转化为简单的2D位面。
5.光照图非常有价值。
6.我们的美术人员在一些关口移除了额外顶点。
7.使用合理的纹理mip标准是一个好主意(注:要让不同分辨率的设备呈现良好的帧率时尤其如此)。
8.结合网格是美术人员可以发挥作用的另一个操作。
9.我们的动画师尽力让不同角色共享动画。
10.要找到美学/性能之间的平衡,就免不了许多粒子效果的迭代。减少发射器数量并尽量减少透明度需求也是一大挑战。
八、要减少内存使用
使用大内存当然会对性能产生负面影响,但在我们的项目中,我们的iPod由于超过内存上限而遭遇了多次崩溃事件。我们的游戏中最耗内存的是纹理。
1.不同设备要使用不同的纹理大小,尤其是UI和大型背景中的纹理。《Shadow Blade》使用的是通用型模板,但如果在启动时检测到设备大小和分辨率,就会载入不同资产。
2.我们要确保未使用的资产不会载入内存。我们必须迟一点在项目中找到仅被一个预制件实例引用,并且从未完全载入内存中实例化的资产。
3.去除网格中的额外多边形也能实现这一点。
4.我们应该重建一些资产的生周期管理。例如,调整主菜单资产的加载/卸载时间,或者关卡资产、游戏音乐的有效期限。
5.每个关卡都要有根据其动态对象需求而量身定制的特定对象库,并根据最小内存需求来优化。对象库可以灵活一点,在开发过程中包含大量对象,但知道游戏对象需求后就要具体一点。
6.保持声音文件在内存的压缩状态也是必要之举。
开发右脑游戏 篇5
导读:我根据大家的需要整理了一份关于《开发右脑的游戏》的内容,具体内容:因为右脑的记忆潜能是左脑的 100 万倍,所以很多人都会去开发右脑,特别是爸爸妈妈们会通过与孩子玩游戏来开发右脑。今天我为大家带来了,一起来看看吧!认知训练:游戏一...因为右脑的记忆潜能是左脑的 100 万倍,所以很多人都会去开发右脑,特别是爸爸妈妈们会通过与孩子玩游戏来开发右脑。今天我为大家带来了,一起来看看吧!
认知训练:
游戏一:神奇的纸盒
玩法:把家里使用过的纸巾盒留下,往里面放进一些玩具、糖果、水果等,让宝宝摸一摸,请他在拿出来之前说出名称,或者给他指令,请他按指令拿出东西来。对大一点的孩子,你可以给他否定的指令,如:“请你把不可以吃的东西拿出来”“请你把不是圆的东西拿出来”等等。为了增加趣味性,也可以使用一些奖励的方法,比如:拿对了糖果,就把糖果奖励给宝宝吃,拿错了,糖果就归妈妈吃等。
提示:这个游戏适合 2-4 岁的孩子,由于宝宝使用触摸觉和视觉来进行判断,可刺激右脑发展。
游戏二:猜一猜这是谁?
玩法:爸爸或妈妈在被窝里发出不同的动物的叫声,比如狼的叫声、狗叫声、狮子的叫声等,让宝宝猜猜藏在被窝里的是什么动物。提示:这个
游戏适合 2-4 岁的宝宝玩。这是一则用听觉进行判断的游戏,也可以刺激宝宝的右脑。
动作训练:
游戏三:会滚动的箱子
玩法:把家里买回来的电视或其他大件物品的纸皮包装箱留下,让宝宝钻进去缩紧身体,然后滚动纸皮箱子,孩子会乐不可支。为了避免伤着孩子,你最好在每次滚动箱子之前大声问他:“准备好了吗?”确定他做好了准备才开始,滚动的幅度也可以根据孩子的适应情况而调整。
提示:这个游戏适合 3 岁以上的孩子玩,因为这样可以锻炼孩子的身体平衡感,也能发展孩子的右脑功能。
游戏四:扔纸球
玩法:拿一个篮子,菜篮或洗衣篮都可以,然后拿一些报纸,把报纸裹成一团,做成一个一个纸球,妈妈、爸爸和宝宝轮流扔纸球,每人扔 10个,看谁扔进篮子里的球最多。
提示:这个游戏适合 2 岁以上的孩子玩,手的动觉、动作的控制、空间距离的判断,这些都有利于孩子的右脑开发。
艺术训练:
游戏五:跳跳舞
玩法:让孩子跟着音乐的节奏跳舞、拍手或做各种各样自己喜欢的动作。提示:这个游戏适合 0-6 岁任何年龄的孩子,对于还不会走路的宝宝,妈妈可以抱着宝宝做跳舞的动作,或跟着节奏舞动他的手脚。大一点的孩子,你可以领着他做,或让他自由发挥。
游戏六:大家一起唱
玩法:把生活中的事件编成歌曲,和孩子边唱边玩。比如,刷牙、洗脸、吃饭,我们可以把这些活动和我们熟悉的旋律如《生日歌》编在一起来唱:我们-快来-刷-牙,我们-快来-刷-牙,我们-快来-刷-----牙,天天-都要-刷------牙。
提示:这个游戏能发展儿童的节奏感。
综合创造能力:
游戏七:苹果树
玩法:从年历上找出有一棵树的图画,让孩子剪一些苹果贴在树上,注意:剪和贴都由孩子自己来做,不要要求孩子剪得像或贴得漂亮,只要他愿意自己动手进行创作,父母就要表现出很欣赏的样子。
游戏八:美丽的手镯
玩法:把用过的信封留下,横剪成一个一个环,然后和孩子一起在环上画自己喜欢的图案和颜色,把它套在手腕上当手镯。妈妈先做一个引起孩子的兴趣,然后放手让他自己来做,以鼓励为主,不要计较孩子做得是否漂亮。
提示:这两个活动都是多种感官配合的活动,既有手的动作,又有颜色的感觉、图案的设计等等,对发展孩子的右脑很有帮助。
开发右脑最简单有效的三种方法
体动法
体动法:一种当你对间脑发问,身体的某部分会自然动起来显示答案的方法。
当我们浅坐在椅子上,稍稍提脚后跟,先是有意识地让脚后跟上下抖动的动作,就叫做“抖擞腿”。抖一阵子后,你会分不清楚到底是有意识地抖动,还是无意识地抖动。
体动法就是运用这种原理,闭上眼睛,将手放在膝盖上,让头脑空空的,然后坐下来,脚盘坐或跪坐都行。
具体方法是:手叠着手,压在下腹,在心中诵念一些句子,一面念着,一面把意识集中在手掌上,刚开始会感觉到手细胞有细微的振动传过来,然后会出现比较大的动作,这时侯就自然地开始各种身体运动。动作一出现,就依抖擞的要领,仍然保持双掌重叠持续做上下的动作,这样一来在无意识下仍会继续自然地动,当动作很小的时候,要有意识地告诉自己“动作大一点,动作更大一点”。体动法就是用这种方法引出身体的自然动作。
记忆游戏
借用右脑记忆训练卡来做记忆游戏。记忆游戏是把连在一起的两张绘图卡用一段文字衔接起来的记忆方法。
譬如要小孩记住一张螃蟹的卡片和一张帽子的卡片,可结合奇象记忆法想成“螃蟹戴着帽子出去玩”,翻开卡片再盖起来,然后问他们盖起寨的卡片是什么图样。以这种方法能够记住的卡片张数,从两张开始,增加到三张、四张,可以一直增加到一百张卡片。经过一段时间训练之后,会发现不可思议的事情,就是再也不需要文字衔接,光是翻开卡片看过之后盖起来,即使是一百张的卡片。也能够正确说出这一百张卡片是什么样的卡片。换言之,说明此时你已经学会了照相记忆,学会了照相记忆法,此时你的速读就会变得容易许多。
默写法
在右脑开发训练的时候,除了图像记忆的训练之外,还需要速读训练。速读训练可以需要借助精英特开发右脑最简单有效的三种方法速读软件了,当然除了使用软件中自身的文章材料训练外,也可以使用精英特速读软件的导入自选文章的功能,把自己准备一些速读的材料导入训练,严格按照训练时间,连续读几次之后,关闭软件,开始默写刚才训练过的内容,写完之后重新打开软件核对是否正确,包括标点符号、改行都尽量做到和材料中一样。
通常一次是没有办法完全记忆,要不断地以同样的方式重复练习,直到完全写得正确之后,再进行下一个练习。
这种训练方法称为一分钟默写训练,一开始自己可以选择内容不太难,篇幅也不长的文章。每天坚持做这种一分钟默写训练,不仅能增强记忆力,更能调节瞬间读取文字的能力,自然就能提高阅读速度。
0~3 岁的宝宝如何开发右脑
游戏一:踢踢腿,伸伸腰
玩法:放舒缓的古典音乐,爸爸妈妈帮助宝宝做身体的动觉训练:头颈运动(前、后、左、右),手臂操(前、后、左、右、伸及绕环),腿部运动(取坐位双脚做内收、外展、屈、伸、绕环)等练习。爸爸妈妈边为宝宝做操,边看着宝宝的眼睛,念口令:一二三四,二二三四......提示:这个游戏适合 0~1 岁的宝宝。身体左侧部位的活动由右脑指挥,右侧部位的活动由左脑指挥。所以,爸爸妈妈经常帮助宝宝做运动,不仅能提高宝宝身体机能的灵活性和协调性,而且培养了宝宝空间的概念,促
进右脑的发育。
游戏二:跳跳舞
玩法:在古典音乐的背景中,爸爸妈妈带领宝宝根据音乐节奏跳舞、拍手或做各种各样自己喜欢的动作。这个游戏适合任何年龄的宝宝,对于还不会走路的宝宝,妈妈可以抱着宝宝做跳舞的动作,或跟着节奏舞动他的手脚。当听到某一乐器发出的声音时,2 岁以上的宝宝可以尝试模仿弹奏该乐器的动作。如:听小提琴曲时模仿拉琴的样子,听到钢琴曲时,左、右手模仿按琴键的姿势。也可以让宝宝跟着音乐的节奏自由发挥,翩翩起舞。
怎么学习游戏开发 篇6
01
基础课程:络游戏程序设计、网络游戏算法设计、网络游戏平台设计以及商业实战项目训练,包含C++、数据结构、算法基础、Windows API使用、MFC原理及其应用、2D图形渲染技术、界面设计与应用。为网络游戏开发打下坚实的语言基础、掌握基本的编程技巧、掌握简单的游戏开发逻辑、掌握常用的数据结构与算法、掌握基本的Windows编程技术,熟悉MFC程序的开发与应用、能够进行游戏开发。
02
2D网络游戏开发主要学习内容有网络游戏程序设计、网络游戏算法设计、2D网络游戏平台设计以及商业实战项目训练,包含C++、数据结构、算法基础、Windows API使用、MFC原理及其应用、2D图形渲染技术、界面设计与应用。为网络游戏开发打下坚实的语言基础、掌握基本的编程技巧、掌握简单的游戏开发逻辑、掌握常用的数据结构与算法、掌握基本的Windows编程技术,熟悉MFC程序的开发与应用、能够进行2D游戏开发。
03
Direct 3D程序开发基础 3D游戏开发技术实战 游戏引擎的修改与使用网络通讯、数据库及游戏服务器 行业规划及职业素质2 游戏综合项目实战训练 基地顶岗项目实训。
04
基础知识:扎实的算法知识。主要有:树或图的搜索算法、A*算法、碰撞检测算法、BSP树、人工智能
05
相关图形处理知识。比如:Direct X编程、OpenGL编程、图形学的相关知识(三维图形的形体、纹理、贴图、照明,还有三维对象的消隐算法比如油画算法,Z缓存)和动画处理知识。如果想深入还要学会几种三维引擎比如OGRE。
06
扎实的程序语言功底,主要代表为VC、DELPHI和JAVA。其中VC使用最广,现在比较大的游戏也由此开发;DELPHI功能也很强,很多网游:比如网金、传奇都用到了DELPHI;JAVA用于开发手机游戏。
07
基础软件:3dsMAX:大多数游戏开发公司美工使用,效率较高,可以独立制作游戏中所有美术相关资源。
08
Delphi:直接编译生成可执行代码,编译速度快。由于Delphi编译器采用了条件编译和选择链接技术,使用它生成的执行文件更加精炼,运行速度更快。在处理速度和存取服务器方面,Delphi的性能远远高于其他同类产品。
09
Photoshop:PHOTOSHOP是一个很好的图像编辑软件,PHOTOSHOP的应用领域很广泛,在图像、图形、文字、视频、出版各方面都有涉及。对于想学游戏的朋友来说,其实这根本就不是一个问题,不管年代怎样变,经济怎样开展,游戏行业是国家紧缺人才,开展空间也是很大的!现在社会竞争压力大,假如没有一门手工、技能很难长时间吃得开,想要学好游戏开发,可以从这个基础开始抓起吧!
游戏编程,这个概念包含了很多深层次的东西。
1.广义上,我给的定义是,游戏引擎开发和游戏逻辑开发。
游戏逻辑开发是集中力量只开发游戏中剧情部分,你只需要做的是什么时候显示什么,什
么时候放出什么声音,什么时候通过网络传输什么数据,什么时候这个物体或者人物做什
么动作。至于底层怎么显示,声音如何处理,网络如何传输,物体动作怎么实现的,你不
用关心,关心这些的是游戏引擎。所以说游戏引擎负责技术方面,而游戏逻辑负责游戏文
化内涵。
成功的游戏是以好的游戏逻辑为基础的,而游戏引擎并不是成功游戏主要条件,但好的游
戏配上好的游戏引擎,确实会给人一种震撼,相比同样的游戏逻辑,好的游戏引擎显示效
果会给人一种全新视觉和听觉感受。
至于游戏逻辑我不想过多解释,但并不是说游戏逻辑简单,游戏逻辑也可以复杂的要命,
这取决与游戏复杂程度和游戏引擎与这个游戏的关联程度。为了解释这句话,我不得不从
游戏引擎解释开始。
早期的游戏是没有游戏引擎这个概念,都是一个游戏一套代码,随着游戏越来越多,大家
发现开发有些游戏中,有很多可重用的代码,逐渐把这些重用代码封状起来,这就是早期
的引擎。对于引擎没有明确的概念,只有好坏和适应程度之分,所谓的好坏,就是引擎支
持功能和显示特性等是否strong,而适应程度是指一个引擎是否适合开发这个游戏,开发这
个游戏是否要自己再编写一些额外的代码。
我举个例子
如果我用开发混斗罗的引擎(假如它有引擎)来开发RPG,和开发RPG游戏的“RPG游戏开
发大师”相比,我们还要做很多工作,才能完成玩法功能一样的游戏。
所以说很难有明确的界限划分这一堆代码是否是游戏引擎,但游戏引擎的任务是不用质疑
的,它的任务就是尽量不用负责底层处理,而专心到游戏逻辑上来。
2.从狭义上分,我只分解游戏引擎部分,基本包括(1)游戏图形引擎(2)声音引擎(3)网络
引擎(4)脚本引擎(5)GUI(6)人工智能引擎(7)物理引擎。
(6)(7)两个不是必须的,而前5个是一个好的游戏引擎要基本具备的,其实每个游戏引擎
中都具备物理引擎,只不过很多游戏对于物理要求不是很高,所以就集成到了图形引擎中
或者游戏逻辑中。
图形引擎是引擎中最难的,它基本要处理游戏引擎中70-80%的工作量,它的主要任务是负
责图形高效显示,包括速度和精度。后面我会集中并详细解释。至于声音和网络引擎大家
通过字面就可以知道它干什么。本人对声音处理和网络传输知道甚少,说出来只能误人子
弟。
至于脚本我还略有研究,我想解释下什么是脚本,游戏中为什么用脚本。脚本有时很难给
出一个定义,但大家都知道那些是脚本语言,我给出的解释是用软件CPU(虚拟CPU)来运行
的编程语言就是脚本语言,软件CPU和所说硬件CPU是对立的,也就是说脚本运行与否先是
关联到这个虚拟CPU,在虚拟CPU上运行,然后再又映射到真正CPU,来真正运行。这个过程
很抽象,我觉2个例子,第一个就是Java语言,它有一个虚拟机,这个虚拟机就是软件CPU
。再举一个例子,我现在要编写这样一个指令、
PRINT S 这个指令表示打印S
S代表一个万能类型。
为了实现这个指令,你首先要有一个函数来负责处理打印
比如是这样的函数
void print(S)
{
cout<
}
这里只是伪代码,只是表示这个意思。
你首先要找出PRINT这个单词,读入到一个buffer1,然后把参数读入buffer2
if(buffer1 == PRINT)
print(buffer2);
这里段代码其实就是一个软件CPU,它负责虚拟运行PRINT S 这个指令。
那么游戏中为什么要用脚本呢!最简单解释就是灵活性好。拿一个RPG游戏例子来说,游
戏中有大量物品,每个物品有大量的属性,如果我把这些属性值直接写到游戏中,每一个
小小的改变就要编译整个游戏,花费很多时间,灵活性很差。
如果我把这些写到一个文件中,用脚本语言来编辑,只需要编译脚本文件就可以了,当然
如果你脚本是解释型的语言,不用编译直接可以运行。
当然脚本还有很多好处,主要目的还是方便性和灵活性。
其实GUI(图形用户接口)是一个重要部分。3D游戏中,出现的是大量的3D模型,这些模型
是先用文件的形式存放好的,而文件里面包括的是3D数据和这些数据的组织方式。
至于数据怎么组织是你引擎要规定好的,这样也方便读取,最后把3D数据加载到内存。现
在问题是3D数据上,我们怎么能有效的得到这些3D模型的数据,手工写进文本里?我靠,
那是奴隶社会,SB的做法。我想你不会这么做。人类很聪明,这就是为什么人把其他动物
关进笼子里,而不是其他动物把人关进笼子里的原因。既然我们很聪明,就要想一个办法
快速的定义3D数据,然后保存成文件。这样一个3D编辑器就产生了。3D编辑器就是类似于
3DMAX那种,但引擎中的编辑器是有特殊目的的,使用者要按照引擎指定要求编辑3D数据,
这样引擎高效的显示和处理数据比较容易,至于3D数据是怎么组织的,是一个设计上的问
题,由你引擎来决定,设计好坏,决定你引擎加载数据是否容易,关系到最后渲染。所以
一般好的游戏引擎都有自己GUI,但你也可以用3DMAX这样的软件,然后读3DMAX文件变成自
己可以利用的数据形式。
说到这里,不知道上面的概念大家是否理解,我想如果你没接触过引擎,可能真的不理解
。其实我很难用简短的语言把这么复杂的问题说清楚,如果有一天你把3D学的融会贯通,
你发现我说的是对的。我不知道大家是否发现一个共性的问题,有时你读一本书,无论你
怎么认真把它看完一遍,你都很难掌握里面的知识,当你再认真看第二遍的时候,你突然
觉得这本书没有第一次看那么晦涩难懂。有些知识都是前后呼应的,它们之间相互联系,
要想完整的理解它们缺一不可。游戏编程的知识也是这样。我前面介绍的如果你看懂了,
那你perfect,如果你没有看懂,也不要灰心,这里介绍的只是一个大纲,让你对游戏编程
unity3d游戏开发论文 篇7
信息化时代, 智能手机等移动终端对人们来说已经不是一个陌生的词, 因其强大的功能而越来越受人们的青睐。智能手机不再像过去的老式机一样只能简单地接听电话和收发短信了, 而是更能迎合众多用户的需求, 成为更多手机用户在工作、学习之余的一部方便灵巧、便于携带的休闲娱乐的移动设备[1]。智能手机拥有如此强大的功能, 都是源于其完善的系统平台, 其中Android系统平台就是其一, 它因其良好的开放性而被很多手机厂商使用, 在市场上占有相当高的比率。基于Android平台的应用中, 游戏因其拥有强大的交互性、娱乐性以及能随时随地进行游戏的便利性而被人们所喜爱, 让开发者看到了手机游戏在Android平台上的巨大的发展空间。
2 游戏功能分析 (The game features analysis)
射击类游戏因其包含明显的动作游戏的特征, 是动作游戏中的一类, 其操作简单、易懂, 是一类比较热门的游戏。该应用主要是通过Unity游戏引擎设计的一款适合于各阶层人士的射击类游戏并移植到Android移动平台。对游戏功能进行分析时, 应集中注意要“做什么”而不是“怎么做”。通过对游戏的分析, 根据游戏目标功能的用例图分析得到游戏的整体框架图, 如图1所示。
3 游戏功能模块的实现 (Realization of the game function module)
3.1 游戏场景
就射击类游戏来讲, 游戏的场景一般都会很大, 因此无法在游戏的界面上完全显示出来, 所以要给游戏的主界面背景添加一个UV动画。游戏中可以看到玩家控制的主角在不停地移动, 而游戏背景总是在向下移动, 让玩家感觉整个画面都在移动, 呈现一种动态的视觉效果。
动态背景创建的原理就是将背景用一张图片进行循环滚动, 从而形成一个动画的过程[2]。为了实现背景的循环滚动, 则需得选择Loop, 将其设为循环播放模式。
3.2 主角管理的实现
在游戏中, 主角有循环移动/具备生命值/可以发射子弹/尾部火焰效果等功能, 在设计时建立一个Player类, 让它与主角关联, Player类中提供了一个Update函数, 这个函数在程序运行时, 每帧都会被调用, 因此, 在这个函数中添加主角移动的部分代码:
在Player类中定义一个enum (枚举) 状态, 包含飞机的三种状态:Playing、Explosion、Invisible。再在子线程方法Destroy Player () 中实现飞机被击中或与敌机发生碰撞后, 飞机退出游戏窗口底部, 然后再从游戏窗口底部返回到游戏界面, 且闪烁一段时间才能被子弹击中的功能。
3.3 敌人管理的实现
敌机的类型主要分为三类, 具体类型如图2所示。
为了能够不停的制造新的敌人, 则需要创建敌人生成器。创建一个Enemy Spawn脚本, 为Update方法添加如下代码:
3.4 碰撞检测的实现
射击游戏中, 为了判断前方是否有障碍物和子弹是否击中对方, 就需要对两个物体进行碰撞检测, 然后根据检验的结果采取相应的方法进行处理。游戏中的碰撞检测主要存在于主角与敌机、主角与敌机子弹、敌机与主角子弹之间。而物体要发生碰撞检测, 主动运行的对象就必须是刚体, 因此, 需要添加一个刚体组件。检验碰撞通常有两种方法On Collision-Enter和On Trigger Enter。应用中采取的则是On Trigger Enter方法[3]。检测中需要使用如下方法设置敌人位置:
4 游戏的完成及测试 (Completion and testing of the game)
在游戏制作完成后, 为了检查游戏是否完整、能否达到预期的效果, 则需要对其进行调试和运行, 以发现游戏中可能有的不足并解决这些问题。进入游戏, 按空格键, 发射子弹;按上、下、左、右键, 上、下、左、右移动;飞机在飞行中若吃到星星, 则会获得一定的分数。若飞机撞到敌机或被敌机子弹集中, 生命值会减一, 当生命值减到零时, 游戏失败, 进入失败界面。
经过测试, 游戏运行效果符合预先设计的游戏总体效果, 各个界面之间的切换也都正确。此外, 还重点测试了游戏过程中其他功能的实现, 玩家控制的主角能正常移动并发射子弹, 在吃到星星后, 也能获得相应的分数。
5 结论 (Conclusion)
游戏是以Unity游戏引擎为开发平台, 并最终实现向Android的移植。
在游戏的设计与开发的整个过程中, 由于对Unity和Android机制研究的还未深入, 遇到过很多问题, 有技术方面的, 有关于游戏模型方面的, 有界面设计方面的, 还有程序运行时出现的各种异常, 移植过程中软件无法打开、运行等问题。但是通过仔细研究Unity引擎及Android平台的开发方法, 均得到解决, 也为以后的继续开发提供基础。
参考文献
[1]段海朋, 关振华.3DS Max 2010完全学习手册[M].北京:清华大学出版社, 2010.
[2]林深华, 等.基于Android平台Unity3D游戏设计与实现[J].企业科技与发展, 2013 (10) :40-42.
角色扮演游戏开发 篇8
目前,互联网“+”的全球化,游戏热潮早已经席卷全球,游戏的开发以及维护成为了一个行业,在游戏这个产业中 RPG 游戏(角色扮演游戏)无疑扮演的是一个至关重要的角色,为适应游戏行业的发展需求而提出本课题。本论文首先对 RPG 游戏进行概述,粗略的介绍 RPG 游戏的制作意义及行业发展前景。其次对游戏的开发软件 Unity 3D 以及开发语言进行简单的介绍。最后对游戏的构思、制作流程、素材、地图、模型、渲染、音效、事件处理、脚本编辑和游戏测试等做了详细阐述,对游戏的开发过程设计思路、构架做了详细的说明以及玩家操作游戏的功能键做了比较详细的介绍。
关键词:
RPG 游戏;Unity 3D;事件处理;脚本编辑
Absract At present, the Internet “+” globalization, the game boom has long been sweeping the world, the game development and maintenance has become an industry in the game industry RPG(role-playing game)game is undoubtedly playing a vital role , In order to meet the development needs of the game industry and put forward the subject.This paper first summarizes the RPG game, and introduces the production significance of RPG game and the development prospect of the industry.Second, the game development software Unity 3D and the development language for a brief introduction.Finally, the game concept, production process, material, map, model, rendering, sound effects, event handling, script editing and game testing made a detailed description of the game development process design ideas, the structure of a detailed description and the player operation The game“s function keys to do a more detailed description.Keywords:
RPG game;Unity 3D;event handling;script editing
目录 摘要..................................................................................................................................................I Absract...........................................................................................................................................II 1 绪论.............................................................................................................................................1 1.1 什么是 RPG 游戏.............................................................................................................1 1.2 游戏制作的意义...............................................................................................................1 1.3 RPG 特性...........................................................................................................................1 1.4 系统要求...........................................................................................................................2 2 技术支持.....................................................................................................................................3 2.1 PhotoShop..........................................................................................................................3 2.2 3DsMax..............................................................................................................................3 2.3 Unity3D 简介.....................................................................................................................3 2.4 脚本语言...........................................................................................................................3 3 需求分析.....................................................................................................................................4 3.1 功能性需求.......................................................................................................................4 3.3 场景需求...........................................................................................................................4 3.3.1 地形.........................................................................................................................4 3.3.2 Player 属性...............................................................................................................5 3.3.3 Enemy 属性..............................................................................................................5 3.4 交互需求...........................................................................................................................6 3.4.1 任务.........................................................................................................................6 3.4.2 商店.........................................................................................................................6 3.4.5 背包.........................................................................................................................7 3.5 设计可行性.......................................................................................................................7 4 详细设计.....................................................................................................................................9 4.1 情节...................................................................................................................................9 4.2 场景...................................................................................................................................9 4.2.1 场景搭建.................................................................................................................9 4.2.2 Lighting..................................................................................................................10
4.2.3 场景的加载...........................................................................................................10 4.2.4 贴图处理...............................................................................................................11 4.2.5 静态模型...............................................................................................................11 4.2.6 动态模型...............................................................................................................12 4.2.7 音效添加...............................................................................................................12 4.3 NPC..................................................................................................................................13 4.3.1 NPC 作用...............................................................................................................13 4.3.2 NPC 事件...............................................................................................................13 4.4 Enemy...............................................................................................................................13 4.4.1 Enemy 分类............................................................................................................13 4.4.2 Enemy 攻击值........................................................................................................14 4.4.3 Enemy 实例化........................................................................................................14 4.5 Player................................................................................................................................14 4.5.1 Player......................................................................................................................14 4.5.2 视觉控制...............................................................................................................15 4.5.3 Player 技能.............................................................................................................16 4.5.4 Player 等级.............................................................................................................16 4.5.5 Player 攻击和受伤害.............................................................................................16 4.5.6 Player 特效.............................................................................................................16 4.5.7 状态转换...............................................................................................................17 4.6 系统状态.........................................................................................................................17 4.6.1 Cursor 设置............................................................................................................17 4.6.2 SkyBox 设置..........................................................................................................17 4.6.3 小地图...................................................................................................................18 4.6.4 状态机...................................................................................................................18 4.6.5 数据读取...............................................................................................................19 4.7 背包系统.........................................................................................................................20 4.7.1 背包 UI..................................................................................................................20 4.7.2 背包功能...............................................................................................................20 4.8 技能系统.........................................................................................................................20
4.8.1 技能.......................................................................................................................20 4.8.2 技能特效...............................................................................................................21 4.8.3 HUDText................................................................................................................21 4.9 敌人攻击系统.................................................................................................................21 4.9.1 敌人数量...............................................................................................................21 4.9.2 敌人伤害...............................................................................................................22 4.10 系统设置.......................................................................................................................22 4.10.1 游戏暂停.............................................................................................................22 4.10.2 声音管理.............................................................................................................22 4.10.3 游戏退出.............................................................................................................23 4.10.4 游戏关于.............................................................................................................23 4.11 NGUI..............................................................................................................................23 4.11.1 NGUI 功能...........................................................................................................23 4.11.2 事件处理.............................................................................................................23 4.12 攻击平衡性...................................................................................................................23 4.12.1 命中率.................................................................................................................23 4.13 操作帮助.......................................................................................................................24 4.13.1 系统语言支持.....................................................................................................24 4.13.2 输入.....................................................................................................................24 4.14 三维量...........................................................................................................................24 4.14.1 坐标系.................................................................................................................24 4.14.2 向量.....................................................................................................................25 5 测试...........................................................................................................................................26 5.1 性能测试.........................................................................................................................26 5.1.1 物理测试...............................................................................................................26 5.1.2 UI 测试...................................................................................................................26 5.2 行为测试.........................................................................................................................26 5.2.1 流程.......................................................................................................................26 5.2.2 正常功能测试.......................................................................................................27 5.2.3 异常测试...............................................................................................................27
5.2.4 边界测试...............................................................................................................27 5.2.5 错误处理测试.......................................................................................................27 5.3平台发布.........................................................................................................................28 5.4 界面测试.........................................................................................................................28 6 结论...........................................................................................................................................32 参考文献.......................................................................................................................................33 致谢...............................................................................................................................................34
绪论 硬件的快速更新使得游戏行业在往 3D 方向发展,早前的 2D 显示状态并不能满足视觉的享受,随着技术的发展 3D 游戏尤其是 RPG 游戏的画面足以满足玩家的对视觉的需求,也是一个开发者对新领域的探索。Unity 3D 作为一个综合的全面的开发引擎受到开发员的青睐,此引擎能够一次开发,多平台发布,缩短开发周期,具有强大的内置开发工具和外置插件,就使得发开更加便利。
本课题以 Unity 3D 为工具进行开发,以打怪剧情为背景进行开发出一款适合视觉的 3D 的 RPG 游戏,以 VisualStuio 为脚本开发工具进行独立的制作。
1.1 什么是 RPG 游戏 RPG(Role Playing Game),目前对于创新化,3D 技术的日益强大给游戏带来了不可估量的发展动力,未来的单机在 3D 和跨平台性上更为卓越。对于技术成熟化,开发技术成熟和新程序员容易上手。而 Unity3D 引擎的多平台发布在游戏开发中占据主导地位,也是 3D 技术最成熟和最容易上手的开发工具。
1.2 游戏制作的意义
网络普及的今天,游戏的平台种类多达十余种,游戏种类也是多种各式,太多的人对游戏有依赖的情节,不管是电脑端的页游、端游还是移动端的手游都能成为大众娱乐的方式,游戏的娱乐不仅是为打发时间,还有开阔视野,沉浸其中,给玩家现实世界给不了得激情和刺激,就像有些爱车的人爱玩极品飞车,速度与激情并存,这种以游戏为娱乐的方式也算是一种放松,据研究表明,爱玩游戏还能锻炼一个人的智力,加速大脑的记忆开发,在游戏中学习、在学习中游戏,也似乎一种让人们在工作学习之余,享受游戏的快乐,也是一款游戏真正成功的意义。
1.3 RPG 特性 游戏发展到今天,种类多种多样,想象力超乎想象,各种类型的游戏带个玩家不一样的视觉和虚拟世界的体验感,作为角色扮演类型的游戏,带给玩家最直接的感觉,暴力和有主宰世界的欲望。RPG 游戏分门别类很多,大致可分为剧情派、战斗派、自由派三类。多变的游戏内容和剧情的多样性使得游戏情节更加
丰富,角色的成长往往也能和玩家产生虚拟的共鸣,沉浸性其中,关卡多样性,特效的丰富性,每次都能有不一样的新鲜感,有充足的想象力强大的 UI 设计扮演着整个游戏的互动性。各种交互事件错综复杂,可触发也可随机产生事件,尤其是对白,以一种最直接、最平滑的方式表白。它的三个基本特征:沉浸性、互动性和想象性,它们三者之间的关系如图:
图 图 1.1 游戏特性 1.4 系统要求 系统要求:Windows10x64 bit。
运行环境配置:DirectX 11 compatible。
CPU 处理器:I5 4200U 或更好。
设备内存:1G。
设备显卡:Intel(R)HD Graphics Family 显存 2 GB 或更好。
设备硬盘:3 GB。
技术支持 2.1 PhotoShop
Adobe Photoshop 主要处理以像素所构成的数字图片或位图构成的图像。本课题以此软件为工具进行图片、图像、贴图的处理。
2.2 3DsMax 它是 Autodesk 3DsMax 的简称,是拥有强大功能的三维动画制作和模型渲染的软件,它强大的工具集种类繁多类型丰富,可扩展性强,自定义工具栏能有助于团队合作开发,加快速度提高运用此引擎的开发速度,本课题以此软件为工具进行模型、动画、渲染的制作。
2.3 Unity3D 简介 此软件由 Unity Technologies 开发的一个轻松创建三维视觉的游戏、游戏可视化、实时三维动画等类型交互内容的多平台的综合型游戏开发引擎游戏工具。Unity 的视图界面简,游戏对象、脚本、事件、地形 简单易懂,并提供了向量等等技术使得开发人员易于理解。此引擎能够一次开发,多平台发布,缩短开发周期更加受到开发人员的青睐。
2.4 脚本语言 Unity 引擎支持多种开发机器语言,目前开发利用最多的语言是由微软开发的 Visual Studio C Sharp 语言,比起自带的 Mono 代码编辑器来说,它具有更强的稳定性,开发速度快,容易上手,易学习,本课题的运行平台是 Windows,利用此编译器是最佳的选择。
需求分析 3.1 功能性需求 本课题采用 3D 的展现方式,是一个基于 Windows平台的单机游戏。
游戏分为两个大的部分:地形和 UI,目前都已经实现了。地形的搭建为 UI的设计做了铺垫,UI 有了地形才能更好的展现它的价值,对于整个游戏所实现的的功能如下:
图 图 3.1 功能模块图 3.3 场景需求 3.3.1 地形 地形是游戏设计的一个重要部分,一个友好的地形能展现给玩家的最直接的心情感受,3D 游戏的视觉场景效果是二维游戏无法与之相比较的,场景搭建和地形设计时要符合现实的比例缩放,有层次的组件场景,即对虚拟场景按照层次结构划组建,模型放置位置合理,理清主次,减少对不必要场景的处理细化,减少运行时渲染对 CPU 资源的占用,对堆积的模型的种类有又明确的有规律可循的命名,便于见名知义。
本课题的场景是中世纪的农场,有房子、草木等地形搭建有关的物体。对于这些导入的资源合理的设置大小在整个农场中所在的位置,比例大小、功能作用等做出合适的调整,如下就是场景的设计图:
图 图 3.2 农场俯瞰图 3.3.2 Player 属性 对于一个游戏中最重要的一个 Object,Player 的各个属性都值的每一个玩家关注。丰富的属性能够增加游戏的乐趣。下图是 Player 属性图:
图 图 3.3 Player 属性图 3.3.3 Enemy 属性 对于一个游戏中最重要的是一个 Object,Enemy 在游戏中扮演者不可缺少的作用,它对于主角的成长、游戏情节的完整有这决定性的作用,对 Enemy 的设计不像 Player 复杂如下图的不完整属性需求:
图 图 3.4 Enemy 属性图 3.4 交互需求 3.4.1 任务 每一个 Player 都扮演着一个主导的作用,都要通过与其它 Object 交互获得信息,游戏中的任务是游戏情节设计的必要的环节,通过接受任务获取必需的物品、金币等,如下的任务图:
图 图 3.5 任务图 3.4.2 商店 作为与主角交互的另一个重要的环节商店,在这里可为其提供需要的物品,当然物品的属性也有多种多样的,如治疗药品、攻击兵器、防御穿戴等,这些物品的属性多种各式,加成攻击、血量增加、蓝量增加、穿戴防御等,这些属性与Player 的属性相对应,就是为其服务的,如下的商店图:
图 图 3.6 商店图 3.4.5 背包 背包系统,顾名思义就是为了存储 Player 的存储物品需求而设计的虚拟存储UI 系统,能够实现对物品的管理、属性信息显示、使用等功能,为 Player 的交互提供了便利。如下图的背包系统图:
图 图 3.7 背包系统 3.5 设计可行性 在整体的设计上,首先场景设计可行性,根据所学的建模软件和绘画技术能够在Unity引擎中利用引擎中强大的地形绘制工具绘制生成合理的适用性的地形场景,完成对场景的建立。
其次对于 Unity 引擎的高级使用,通过 Unity 为开发者提供了 Asset store 更加方便地学习和交流。因此 Unity3D 这款软件能够充分实现系统的需求。
最后 UI 的设计设计,利用 NGUI 的强大功能作为交互的设计,NGUI 稳定安全,当然还是以它的易学习,开发快为主。
对于整个系统还要做到以下:
稳定性:一次开发能够长期运行,不需要后期维护。
简洁性:代码整洁清晰,注释全面,结构明了,逻辑清楚。
易扩展性:一次开发后的框架可对其功能、角色添加。
详细设计 4.1 情节 本课题以中世纪农场为场景,村子受到外敌(狼)的入侵,需要有勇敢的勇士拿起手中的剑,保护村民,选择不同的角色控制不同的人物。与不同的 NPC 互动能够获取任务、金币、药水、武器装备,角色有等级、经验值、生命值、技能值,这些能够使角色获取更高的伤害和防御值,为击杀敌人做好准备并且能获得经验值,提升等级。游戏流程如下:
图 图 4.1 游戏流程 4.2 场景 4.2.1 场景搭建 地形绘制依照 Unity 自带的 Terrain 工具进行绘制简单的地形,大部分的Game Object 由 3Ds Max 导出 Fbx 格式的文件在导入到 Unity 里面进行放置、渲染等,此为静态的 Object,如房子、地板,而动态的树木、花草则由 Terrain 里面的绘制功能进行制作,系统的 Wind Zone 能产生风的效果使得效果更佳显著,Unity 自带的 Directional light 会产生灯光的效果。进而完成场景的搭建。
图 图 4.2 绘制地形工具 4.2.2 Lighting 为了保证场景的渲染稳定性,节约 CPU 效率和静态资源的加载速率才使用烘焙提高可执行性,对 Object 的 Lights、Renders、Terrains 做出烘焙之后,再次运行的时候,显卡和 CPU 不需要进行对环境光效果的运算,插值运算是 Unity的一个特色,在这个过程中速度非常快,即便实时的计算渲染人眼无法分辨,如果烘焙后,在运行时就能避免在游戏卡顿时出现出现不友好的画面,看起来游戏更加流畅,连续性更加明显,如下的设置是对 Scene 之间的加载做了预设性的加载。
图 图 4.3 烘焙图 4.2.3 场景的加载 在 Build Setting 里面加载 Scene 的索引,当某个事件触发时,调用方法就可场景跳转,即可实现对场景的加载。
图 图 4.4 BuildingSetting 图 4.2.4 贴图处理 贴图处理主要以网上下载和 Photoshop 制作的为主,进行修改、剪辑再加工处理,剪裁出适合游戏场景需要的贴图。贴图主要以 PNG 格式为主,利用 NGUI插件的 Atlas Maker 制作图集统一管理。如图:
图 图 4.5 AtlasMaker 4.2.5 静态模型 由3Ds Max导出的Fbx文件再导入到Unity引擎里面的时候贴图和可能会丢失,通过 Untiy 里面的 Texture 选项进行引用和修改贴图,某些模型需要添加 Box Collier 即是添加碰撞体、Rigidbody 等设置静态模型的物理属性,再增加灯光渲染显示出更好的视觉效果。
对导入的模型的进行位置、旋转、大小的再次调整,添加、设置此 Object的 Tag 便于 Object 与 Object 之间的相互引用是可通过这个 Tag 标签的 String 串找到要引用的 Object,而 Layer 的概念是设置不同的层次,根据此层可以让摄像机选择不同的层渲染,如小地图的设置,只能看到主角,而其它的看不到,不同的模型有不同的属性参数,可根据需要进行设置。
4.2.6 动态模型 动态模型主要是 Player 的动画,虽然 NPC 也是动态的,只是简单的 Idle 动画。
首先为导入的模型添加 Aimation 动画,创建有限状态机,在不同状态时可以改变不同的动画状态,如 Player 的 Atack、Death、Cast、Skill-MagicBall 等不同状态的动画,还要对 Player 添加 Character Controller,此 Component 属于控制类型,有模拟控制器的效果它的不同属性用于控制不同的效果。
图 图 4.6 动画图 4.2.7 音效添加 每一个导入 Unity 引擎的格式为 Mp3 的音频都是一个 Audio Clip,每一个声音片段要想播放需要一个声音源 AudioSourse 用于加载这个 Audio Clip,作为一
个 3D 的游戏,声音有远近不同的大小,作为整个游戏最重要的一部分 Main Camera 如同一双眼睛,所以还需要在此 Component 添加一个 Audio Listener 作为声音的监听器,AudioSource 是一个声音源头和 AudioListener 相当于一个喇叭从而共同协作控制整个声音。
4.3 NPC 4.3.1 NPC 作用 NPC 在本此课题中可以当作是一个商店和任务系统,在这个游戏中 NPC 扮演的是一个动态的模型,有简单的 Idle 动画。游戏中 Bar_NPC 是一个任务系统,角色可在此接受任务,并获取金币;Shop Drug_Npc 是一个药品,可在此购买药品;Shop Weapon_Npc 是个武器商店,可在此购买武器装备等。
4.3.2 NPC 事件 事件触发时游戏中最常用的事件判断之一,当检测到鼠标碰到 NPC 时,就会出发脚本里的鼠标检测 OnMouseOver()方法,此时的触发器会出发这个方法,并 不 会 能 让 此 刻 方 法 里 面 的 事 件,当 点 击 了 鼠 标 事 件 后 即 是Input.GetMouseButtonDown(0)事件成立,弹出该事件面板。
4.4 Enemy 4.4.1 Enemy 分类 根据剧情需要,本课题设置了三种 Enemy 类型的狼,根据大小和攻击力分别为 Wol fBaby、Wolf Normal、Wolf Boss,这三种角色都有 7 种不同的动画,可分为 Wolf–Attack1、Wolf–Attack2、Wolf–Idle、Wolf–Take Damage1、Wolf–Take Damage2、Wolf –Death、Wolf –Walk,让狼有不同的丰富状态。
图 图 4.7 动画图
4.4.2 Enemy 攻击值 Enemy 的攻击力是根据脚本定义的如下以 Wolf Baby 的脚本为例分析,State为 Idle,Hp 为 200,Exp 为 40 等等。
图 图 4.8 攻击属性图 4.4.3 Enemy 实例化 首先,建立一个 Create Empty Object,设置它的坐标,作为一个 Spawn 用于产生狼,设置一个时间标识位,计数要产生的狼,把狼做成 Prefabs,在 Update()函数里面实例化 GameObject.Instantiate 函数会在游戏加载的时候按照帧频率执行,能够实时监测。
4.5 Player 4.5.1 Player Player 作为一个游戏的主角之一,它由玩家直接控制,是和主角交互最直接、最频繁的角色,当角色模型导入在之后,CharacterController 是一个控制器能控制物体的移动属性,Animation 动画可根据动画类型加载动画,以便在不同的情景使用不同的动画效果,并把 Player 做成一个 Prefabs,在不同场景中能够节约内存的实例化和加载,添加 GameObject 的 Tag 并指定为是 Player,添加和设置Layer层次为UI,为了让UI的Camera的渲染出效果。通过控制CharacterController控制器控制移动属性,鼠标点击粒子系统实例化位置,它的动画状态机制,Hero类型、等级、名字、血量、蓝药量、获取经验值、攻击力值、防御值、攻击速度、治疗值、攻击状态、粒子系统、渲染、命中率、未命中率、鼠标锁定事件、UI渲染、事件处理等等,丰富角色的状态。
4.5.2 视觉控制 Player 是整个游戏的主角,也是整个设计的重点,主角的合适 3D 的视觉控制是一个游戏的亮点。主角的移动控制,首先获取屏幕的某个点,当鼠标点击屏幕时就会产生一个射线,自动检测屏幕上的点,如果这个射线检测到碰到的物体的 Tag 是 TagsC.ground 即地面时,获取这个点的坐标 Position,并记录下这个点,让主角朝这个点移动,改变状态由 Idle 动画给成 Walk 动画,根据记录的点,实例化一个点击特效,这个特效会即是在 0.38s 内消失,就产生了一个实例化后就消失的状态。
Player 的移动相对复杂,有很多的条件需要判断,而 Player 的视觉围绕和视觉跟随就显得简单了。首先视觉的跟随是获取 Camera 的坐标,在获取 Player 的坐标,两者的位置差就是一个固定的值,在 Update()函数里面,Camera 的位置总是有 Player 的位置加上两者的坐标差,不管 Player 的位置如果移动,Camera的位置总是跟随 Player;其次,视觉的缩放功能,只需要设置 Camera 和 Player插值之间的关系,当滚动鼠标中轮时,根据鼠标中轮返回的值的正负来增大和拉小视觉;最后,要控制 Camera 的 360 度旋转,只需要设置 Component 的 Rotate Around()方法,设置其参数,当按下鼠标右键时不松开时,向左或者向右拖动鼠标时 Input.GetAxis(”Mouse X“)就会返回一个正值或者负值,根据这个差量,改变 Camera 的 Transform 就能实现视觉的 360 度移动,同样的在上下移动时 Input.GetAxis(”Mouse Y“)也会返回相同的数值,实现上下视觉的反转,为了考虑不能看到地面以下的视角,这个旋转值会限制在十度和八十度的范围内,这就是视觉
的效果。
4.5.3 Player 技能 根据角色不同技能也有所不同,角色是剑士和法师,各属性分别如下:
图 图 4.9 技能属性图 4.5.4 Player 等级 Player 的等级共有 10 级,当杀死敌人狼时,角色的 Exp 的经验值会增加,当 Exp 达到 100%时会自动从零再增加,这时角色的等级就会加一,当加到一定的程度时技能键就可以实现。
4.5.5 Player 攻击和受伤害 当技能解锁以后,不用技能打出来的伤害如果能打中敌人伤害是 20,打不中就是 0,如果升级是在后,Player 的技能就会解锁,用技能伤害就会更高,在购买了武器后伤害就会加成,在 Player 技能里面做了详细的介绍。对于 Player上收到的伤害来说,如果是不同的敌人用不同的技能伤害不同,还有 Player 的防御力也会有削弱伤害值得效果,总之比较复杂和多变。
4.5.6 Player 特效 一个游戏的特效是非常重要的,本课题中的特效包括声音特效和粒子特效,音效最基本的作用是视觉的真实感,声音都能传达一定含义的想象力,而粒子特
效给人更多的脑补的场景,增加画面的渲染力和想象力,给予视觉冲击。对于玩家也是一种玩赏的乐趣。
4.5.7 状态转换 根据状态可分为HeroType、AttackState、PlayerState都记录在对应的枚举里面。HeroType有两种枚举类型Swordman、Magician和角色有关,用于区分角色,AttackState共有三种枚举类型的状态,对应着不同的状态,分别为Moving、Idle、Attack是角色正常状态的转换,而PlayerState对应着四种枚举类型的状态,对应着不同的转化的动画状态,这些动画状态对应的名的字分别为:HeroType-Death、HeroType-Control-Walk、HeroType-Normal-Attack、HeroType-Skill-Attack,这四种类型对应着对应的动画控制状态,为状态转化做了准备,也是程序所需要的必须状态。
4.6 系统状态 4.6.1 Cursor 设置 Untiy 引擎提供了强大的鼠标事件,打开 PLayerSettings 在 Dfault Cursor 里面选择一张 2D 的 Texture,即可设置它的默认状态的图标显示状态,这仅仅是简单的设置类型,当 Player 在不同的状态时会有不同的 Cursor 显示 Texture,首先对Texture做简单的设置,既是Cursor的方法SetCursor进行设置Textrre的类型,二维坐标,显示模式。它的显示控制和角色的状态转换有着必然的联系。
图 图 4.10 鼠标箭头图 4.6.2 SkyBox 设置
SkyBox 简称天空盒,是控制摄像机背景的样式的一个 Component,用于渲染天空盒的材质,包括6个纹理。这种材质应该用天空盒着色器(Skybox Shader),而每个纹理应该配置适当的全球的方向,有两种选择添加天空盒(Skyboxes)的方式。可以把他们添加到单独的相机(通常是主要的相机),或者通过渲染设置中(Render Settings”s)的天空盒材质(Skybox Material)属性来建立一个默认设置的天空盒(Skyboxes)。
图 4.11 天空盒图 4.6.3 小地图 首先创建一个 Camera 作为小地图的“眼睛”,放到合适的位置,在 Project面板下创建一个 RenderTexture,它能够实时的渲染出一个动态的视觉显示在一张贴图上,有动画的效果,指定 Camera 的 TargetTexture 属性,把新建立的RenderTexture 赋值给它,此时的 Camera 就会把照射的视觉显示在一个 Texture上,就有了小地图的效果。指定 Camera 的 Layer 属性,让它指定渲染曾,可以过滤掉不想渲染的事物,做到有选择性的交互。
4.6.4 状态机 一个游戏的状体机制简称 FSM 即是(Finite-Dtate Machine,FSM)的简称,是游戏角色状态的一种合理转换,根据场景的需要,有三种类型的角色,分别为玩家控制的角色、狼、NPC,各有不同的状态,下面对此分别作出分析。
对于 NPC 来说,是一个只有两种状态的状态机之间的状态的转化,有静止到抖动再到静止的状态转化,在本课题中,有三个 NPC,它们会在指定的 Position点来回摇摆,间隔一段时间后它自己会停止摇摆,保持静止,而后在间隔一段时
间后就会再摇摆。
图 图 4.12 NPC 状态图 对于 Enemy 狼来说它的动作状态有静止、Idle、攻击、行走、死亡这五种,这几种状态之间的转化有些是双向的,有些是单向的,如图所示:
图 图 4.13 Enemy 状态图 对于 Player 来说是相对比较复杂的状态的转换,由静止、Idle、行走、攻击、技能攻击、死亡这六种状态,这几种状态之间的转化有些是双向的,有些是单向的,如图所示:
图 图 4.14 Player 状态图 4.6.5 数据读取 本课题中的 UI 系统较为复杂,技能、物品以及各种属性种类多且杂,不适合在脚本中定义这些属性值,而且也不利于数据的修改、筛选和新增,为了满足游戏里面的需求,外置文本,只需要对文本进行管理,这种方式对内存的优化、处理速度都起到重要缓解作用,节省了 unity 引擎对游戏的运行的启动时间。
4.7 背包系统 4.7.1 背包 UI 利用 NGUI 的便利,创建相应的图集、字体集,对 UI 界面进行布局,给系统添加物品栏,能够购买、介绍、查看物品属性的面板,设置 Sprite 的属性 Tag的设置和编辑,Layer 的设置为 CameraAnim 即是只对 Camera 所在层进行渲染,给一个精灵添加 Buutton 脚本,添加 BoxCollider 碰撞组件,此时的精灵就是一个按钮了,它有个 OnClick 属性,可为其注册一个 Method,就能监听不同的事件,具有了按钮的功能,能够对事件监听、事件处理,添加一个 PlaySound 脚本,指定其 AudioClip 就能够播放声音。给 Package 添加 NGUI 脚本 UI Drag Object,重写 OnDragDropRelease 方法,能够实现拖拽功能。
4.7.2 背包功能 背包系统包括药品购买,装备购买、装备穿戴状态更新,UI 控制等。
药品的显示在 Shop 面板中,当游戏运行时,对应的物品的 Id、Icon、伤害值、价格、作用、属性都会从外部的数据中读取,读取后实例化加载,根据数据的分类读取到不同的脚本中,在商店中点击购买药瓶后输入数量,计算要购买的总价值,首先会和背包中的金币数值比较,如果小于金币数时就能购买,否则不触发事件,此后,就会在背包中的商店面板中显示购买过的物品和数量,这个过程在背包系统中是同步的,利用 Upadte 函数的实时性检测做到同步,当鼠标放置在物品上面时,触发IsHover的值为真,根据此条件就会显示此物品的属性值,当按下鼠标右键时就可以使用此物品,或穿戴、或恢复发力和血量等等,当物品是药瓶时,右键点击使用就会增加 Player 的属性值,如果是装备,和药瓶不一样的是它会在另一个装备面板中克隆出一个Icon来显示,在当前面板中消失此Icon,此过程就是物品穿戴的经过,穿戴后,Player 的 States 的属性就会增加,当在另一个装备面板中显示的 Icon 在鼠标右击就会卸下此物品的信息,卸下后对应的Player 的 States 的属性就会随之更改状态信息。
4.8 技能系统 4.8.1 技能 Player 的技能分为普通的打击和技能打击,普通的打击不用玩家控制,只需要在一定的范围内,达到命中率即可打出伤害,而对于技能伤害主要是由 UI 触
发控制的,在释放技能前首先得到该技能需要的蓝量,获得 Mp 之后,去释放这个技能,这是设计的思路。
对于技能伤害的制作来说,它是利用 NGUI 的强大功能工具栏实例化出一个工具栏 NGUITools.AddChild(Grid,GameObject,SkillItemPrefab)创建技能栏,建立合适的 Sprite,放置合适的位置,设置技能的等级,根据 Player 的等级来解锁,如果 Player 的等级不够,释放技能的功能就不能实现,如果达到等级时,释放技能前先要判断技能栏里面的技能类型,这里分为药和攻击技能,如果是药品,为Player 增加相应的 MP 和 HP,如果是技能攻击就切换状态,实例化粒子系统释放特效,根据技能的伤害减少敌人的血量。当然释放技能钱还有判断和设置技能的释放地点、持续时间、声音、消失等,丰富技能多样性。
4.8.2 技能特效 技能特效是 Player 是在释放的时候示例化出来的粒子特效,当释放技能的时候就会调用 Player 的 PlayerAttack 脚本的 UseSkill 方法,判断要实例化的特效,这四种状态的形势释放技能:主角活着的时候使用技能、主动地使用技能、鼠标锁定敌人的时候使用技能、被动的释放技能这四种状态,根据这些状态的不同选择不同的特效实例化。
Player 的特效有六中,分别是 CriticalStrike、Heal、BluerHeal、RangeMagic、One-HandQuicken、MageicSpher。首先把这些特效放在一个 Dictionary 字典集里面,然后从里面选择出需要的进行实例化,这样能够准确而且快速的达到效果。
4.8.3 HUDText 它的作用是将 Hudtext 脚本游戏对象在你的 UIRoot 和设置要使用的字体。让它跟着一个对象绘制另一个摄像头,将 UIFollowtarget 对同一对象并设置它的目标。使用 Hudtext 的函数代码,使用添加新的浮动文本条目。可以调整这个按键的 Hudtext 脚本,改变文本的运动适合系统的需求。
4.9 敌人攻击系统 4.9.1 敌人数量 敌人狼分为三种。小狼、正常狼、狼王,跟狼添加脚本对其数量实例化时间,地点进行控制,根据任务量和获取金币的多少在者就是 Player 的低等级的时候能打死的最大数量而定,小狼的数量为 5 只最为合适,在程序运行的时候实例化 5
【unity3d游戏开发论文】推荐阅读:
Unity3D平台10-21
unity3d java script 脚本学习笔记08-02
Unity3D在教育中的应用研究08-20
休闲游戏开发12-05
教育游戏理论与开发07-16
棋牌游戏开发要求09-27
棋牌游戏开发公司大全08-18
游戏开发部门职责职能09-04
开发儿童智力游戏有哪些08-12
单机游戏的二次开发12-16