Unity3D在Android游戏开发中的应用
2015-01-13林昕
林昕
摘 要:目前,作为3D游戏开发引擎和工具,Unity3D以其跨平台和易用性等特性,被越来越多的公司所使用,并逐步成为开发首选工具。本文对Unity3D工具的基本使用做简介,并通过构建一个简单的3D游戏过程,介绍Unity3D在Android游戏开发中的应用,同时指出了该工具的广阔应用。
关键词: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).
[2]金玺曾.Unity 3D手机游戏开发[M].北京:清华大学出版社,2013.