基于Unity3D的手机游戏开发

2017-03-06 20:14陈雪梅
电子技术与软件工程 2016年23期
关键词:手机游戏

摘 要

介绍了一款基于unity开发的轻量级手机游戏开发过程,探讨在Unity3D平台下完成游戏关卡,场景以及功能模块的设计过程,提出实现Unity3D手机游戏开发采用的核心技术及核心代码,可供开发人员提供解决游戏开发问题的思路。

【关键词】Unity3d Vector 手机游戏

1 引言

Unity3d是由Unity Technologies 公司开发的跨平台专业游戏引擎,是如今市场上一款全面整合的专业游戏引擎,软件其编辑器可运行在Windows 和Mac OS X双系统下,利用其所开发的游戏可发布至Windows、Mac、Wii、iphone、Windows phone 8和Android平台。Unity游戏引擎作为一款跨平台的游戏开发工具,其具有开发快速,易上手,跨平台发布,可扩展性强等特点。这里论述开发了一款3D格斗类手机游戏的过程,着重解决了屏幕自适应,屏幕滑动模式,美术资源管理,手柄控制,角色动画状态机,敌人AI交互设计,动态数据读取刷新,攻击技能成长系统设计,场景七大攻击技能释放与控制,单机副本以及厢房挑战关卡设计与实现等一系列问题,对其它类型的游戏开发具有一定的借鉴与学习参考的意义。

2 手机游戏开发关键技术

基于Unity的手机游戏开发,手机游戏主要包含主屏幕滑屏,界面刷新,技能成长系统,虚拟杆控制,场景技能释放,怪物AI设计等多大功能模块设计,实现并开发游戏,设计主要的关键技术及过程有:

(1)通过数值计算,设计屏幕自适应技术。

(2)初步研究实现PC端和手机端的触屏控制,通过Touch类和Input类设计实现在不同平台的“十字架”滑屏技术。

(3)通过把二维空间向量转三维空间向量的方法,实现游戏手柄的功能控制技术。

(4)使用Mecanim动画系统设计玩家的移动状态机,结合状态机设计手机手柄控制玩家移动技术。

(5)设计玩家七大攻击技能模块的成长技能系统,配置游戏道具数据创建XML表,读取XML表信息使用字典来刷新统一管理游戏数据技术。

(6)完成UI界面设计排版,打包做成预制件,控制游戏界面的加载和销毁技术。

(7)设计实现三类敌人AI(蜘蛛,机器人,大boss)人工智能,使用大量的射线碰撞检测,向量(例如点乘,叉乘)知识完成交互式攻击技术。

(8)实例化各类技能(火系,水系,千里眼,螺旋转,保护,法宝,瞬移),通过协程,视线追逐算法控制技能的移动方式以及攻击方式技术。

(9)完成游戏的C#脚本的逻辑算法实现,内容涉及到游戏玩法,关卡逻辑,数据刷新,怪物的人工智能。

3 手机游戏客户端的设计与实现过程

3.1 手机滑屏控制模式的实现

实现在PC端与手机端的滑屏效果,通过屏幕上下左右中间的虚拟十字架的坐标,控制移动和定位相机位置,屏幕滑动的运动方式分为两部分:

(1)手指(鼠标)拖动相機带动屏幕移动。

(2)当移动的距离超过一定距离时候同时释放手指(鼠标)相机将会自动弹簧式的移动到定位目的地,实现了上下左右滑动屏幕。手机上下左右滑动屏幕可以摄像机照射的位置弹簧式的移动到指定位置。

算法分析

//当鼠标按下的时候

if(input.GetMouseButtonDown)

//记录手指按下的位置

posDown = input.GetMouseButtonDown

//当鼠标按住的时候

if(input.GetMouseButton)

//判断是水平滑动还是左右滑动 , System.Math.Abs()获取绝对值;

xValue = System.Math.Abs(input.MousePosition.x–posDown.x)

Value = System.Math.Abs(input.MousePosition.y–posDown.y)

//左右移动的值大于上下移动的值

if(xValue>yValue)

//左右水平滑动,固定射线机位置的垂直分量的值

//左右移动的值小于上下移动的值

elseif(xValue

//上下垂直滑动,固定射线机位置的水平分量的值

//鼠标抬起时刻

if(input.GetMouseButtonUp)

//判断鼠标滑动的值,有没有超过的滑动sliderValue

if(xValue>sliderValue)

//使射线机移动指定位置

else

//滑动值太小,使摄像机移动起始位置

3.2 游戏虚拟杆控制的实现

通过继承NGUI中Drawdropitem类实现鼠标和手指可拖动圆球状态。根据虚拟杆的大小,设计限制虚拟杆的移动圆球移动范围离中心点的距离小于100,当距离大于100时,限制距离为100。接着中心圆球的位置到虚拟杆中心位置的向量方向控制玩家角色的移动方向,紧接着根据中心可移动圆球离虚拟杆中心位置的距离长度控制玩家角色的移动速度,整个二维平面的虚拟杆360度旋转移动,映射到玩家在三维空间的移动。最后根据鼠标和手指的状态控制中心圆球的初始状态,当鼠标和手指离开时候,中心圆球将会重新回归虚拟杆的中心位置,此时玩家将处于休闲不移动的状态,当鼠标或者手指拖动中心圆球时候,将启动控制玩家角色的移动状态。

算法分析

//拖动小球,限制可拖动最大距离 //继承NGUI的DrawDropItem类可实现拖动一个UI控件(小球) //记录小球的位置//使用input.MousePositon记录小球位置posBall//计算小球到底盘的向量,记录向量方向和大小。

vec = posBall–posOriginal;//记录的方向映射到三维空间(x,y)平面上,360度控制角色的方向

Vector3 playerPos = new Vector3();

playerPos = Player.GetCompoent().localPosition; playerPos.forward = vec.normarlized;//记录的向量大小控制角色移动速度 float speedRate = Vector3.distance(vec);

3.3 游戏敌人AI功能的实现

蜘蛛的人工智能控制是由Unity中物体的触碰器触发,每个蜘蛛都有一个立方体触碰器,玩家如果进入这个范围,将由OnColliderEnter()触发进入函数,蜘蛛将进入攻击状态,采取视线追逐算法调整蜘蛛的朝向和移动,当距离玩家到一定距离的时候就会释放攻击技能。相反,如果玩家不在攻击范围,或者逃离到攻击范围之外,将由OnColliderExit()触发离开函数,此时蜘蛛将回归到休闲巡逻状态。

机器人AI是比蜘蛛更具智能,机器人具有巡逻状态,只不过加入了模糊概率算法,提高了不确定性,增加了机器人的智能的真实性。机器人将在一个圆圈范围巡逻,变走变看周围环境的变化,判断是否有玩家进入攻击范围。当玩家进入攻击范围,且玩家是在机器人的视线前方,此时机器人将采取开枪的技能。当玩家进入攻击范围,但玩家在机器人的视线后方,此时判断玩家与机器人之间的距离,如果足够近的话,机器人将会发现玩家采取掉头攻击,如果距离比较远,那么玩家不会被机器人发现可以蒙混过关。

3.4 游戏动画系统技术分析

unity引擎有自带的动画系统,Mecanim动画系统,通过状态机来控制角色的移动。逻辑及算法分析:

//当虚拟杆启动时,角色开启移动动画状态

//获取1.4.3的vec方向和大小,赋值给玩家

Vector3 playerPos = new Vector3();

playerPos = Player.GetCompoent().localPosition;

playerPos.forward = vec.normarlized; playerAni.SetBool(runBool,true); playerAni.SetFloat(speedFloat,speedRate);//当虚拟杆关闭时,角色动画恢复休闲状态

Animator playerAni = player.getcomponent();

playerAni.SetBool(idleBool,true);

//当点击释放技能时,动画状态跳转到释放技能状态的动画

playerAni.SetBool(skillBool,true);

3.5 游戏物理引擎射线技术分析

射线检测主要是从某个物体(摄像机),发出一条射线,然后进行判断射线是否碰撞到指定物体,然后在相对于的接口函数编写出相应的反应事件,算法分析:

//定义一条从摄像机发射到鼠标点击位置的射线

Ray ray = Camera.ScreenPointToRay(Input.MousePosition); //使用RaycastHit hit來存储碰撞物体信息 //如果发出射线碰撞成功 if(Physics.RayCast(Ray,outhit))

3.6 游戏技能释放分析

3.6.1 火系技能

实例化出来的位置是处于敌人的上方,利用协程IEnumerator的程序知识控制其实例化出来的顺序,前后一共实例化八个火炮,当其被实例化出来的时候,火炮将自动寻找靠近玩家的敌人进行攻击,采取的攻击方式是视线追逐。

3.6.2 水系技能

实例化的位置比较讲究,因为其方向和位置总要面向敌人,所以其实例化的位置应该处于玩家的上方,而且四个水系技能炮所处的平面是与玩家和敌人的直线垂直,实例化之前需要先计算从敌人到玩家的方向向量的垂直向量,得出垂直的单位向量后再乘以距离大小,得出火系技能的左右距离,最后加上向上的方向向量的距离就可以得出实例化位置,实例化出来将采取视线追逐的方式对敌人进行追击。

3.6.3 瞬移技能

在释放技能的时候,玩家将会向前方发射一条被规定好距离的射线来确定前方是否有物体,射线进行碰撞检测,当有碰撞到物体的时,瞬移技能无法释放,当射线检测不到有物体的时候,玩家可以向前瞬间移动,移动方法是累加玩家自身的Forward向量。

3.6.4 千里眼技能

玩家一共有三种状态,正常的状态,千里眼状态,保护状态,启动此状态时候,只需要切换玩家的状态到千里眼的状态,然后改变手柄的控制,此时手柄的控制将会发生改变,第一控制的对象由玩家到摄像机,移动范围由一个圆圈范围到一个圆环范围,也就是手柄的中心圆球其移动的是50到100的可移动范围。而当启动千里眼状态时,游戏界面将会增加一个控制摄像机前后左右移动的界面。玩家可以变旋转摄像机边移动摄像机的位置。

3.7 游戏数据配置与刷新的实现

游戏数据存储在XML表中,而数据的提取刷新也是在XML表中进行的,而提取出来的一条Item数据将被存储在Dictionary字典里面,根据键对值的方式进行读取和存储数据,从而刷新游戏数据。

4 结束语

本文着重介绍了基于unity开发的轻量级手机游戏包含主屏幕滑屏,界面刷新,技能成长系统,虚拟杆控制,场景技能释放,怪物AI设计等多大功能模块设计及采用的开发技术算法分析,研究在Unity3D平台下完成游戏关卡,场景以及功能模块的设计过程,提出实现Unity3D手机游戏开发采用的核心技术及核心代码,以供游戏开发技术人员提供解决游戏开发问题的一种新思路。

参考文献

[1]游戏核心算法编程内幕[M].北京希望电子出版社,2005.

[2]游戏发展现状分析报告:86讯息网.

[3]SIKI Unity教程:泰课网.

[4]蛮牛游戏论坛:游戏蛮牛.

作者简介

陈雪梅(1978-),女,广东省人,硕士学位。研究方向为计算机程序设计、移动开发、数据库设计。

作者单位

广东技术师范学院 广东省广州市 510310

猜你喜欢
手机游戏
关于“移动互联网时代青少年手机游戏沉迷问题研究”的文献综述
引导小学生理性对待手机游戏的策略
基于手机游戏中UI界面的交互设计研究
手机游戏用户体验研究
陕西省大学生手机游戏迷恋度实证分析
让手机游戏成为传统文化的传播新渠道
手机游戏对大学生的负面影响及对策分析
浅谈手机游戏业务发展策略
在路上:手机游戏的2010:引爆点:手机游戏新机遇
手机游戏试了才说好