基于Unity 网络游戏开发技术的研究与实现

2021-04-26 04:13王元鸿胡志慧
科学技术创新 2021年10期
关键词:插件摄像机状态

王 洋 王元鸿 胡志慧*

(湖北汽车工业学院 电气与信息工程学院,湖北 十堰 442000)

中国游戏市场持续增长,用户体量进入存量博弈。中国游戏市场规模在过去的几年保持高速增长,行业销售规模逐年有明显突破。与此同时,游戏在不同平台中发行的频率越来越高,从客户端到网页端,从网页端到移动端,越来越多的平台对游戏行业的支持变得友好。高速高频的移动处理器,速度快、延迟低的5G 网络,这些先进的科技催生出越来越多的游戏,在此其中,网络游戏也得以有更好的游玩体验。因此游戏行业在中国会成为互联网产业的重头,将会带来持久的经济发展和良好的就业前景。

游戏开发在各国都有很大的技术和游戏交流圈,每当有游戏发布或预热宣传,都会引起一次不小的讨论,这会涉及到游戏开发技术的运用和硬件技术突破。游戏开发不仅有计算机专业人才研究,也需要艺术、文学、哲学以及数学工作者的参与,游戏美术描绘了游戏表现、游戏音乐烘托游戏氛围、心理学哲学洞悉玩家内心、游戏文学阐述玩家游戏情节,数学模型用以提升游玩反馈。诸多行业参与进游戏开发,所以这个行业作为IT 行业是一个融合技术与艺术的热门行业。

1 游戏插件

本文开发研究的网络游戏基于Unity 引擎实现,它具有强大的图形接口和资源优化方案,丰富的游戏资源和功能性插件。Unity 采用组件模式开发,一般开发模式完全基于代码实现,与虚幻4 的蓝图比较上手容易、进阶难,要实现复杂效果耗时较长[1]。虽然自身也有一些集成开发功能,但也得依赖于现有的插件。其中为了解决高级效果的开发时长问题,一般会采用发布版的插件。

1.1 卡通着色器

“unity-chan! ”和“RealToon”这两款资源包中包含了二次元次时代卡通渲染,当前游戏中的主要角色模型都使用其中的着色器进行渲染的。上述的MMD4Mecanim 插件基础着色器也是基于“unity-chan!”插件实现的[2]。图1 将模型的颜色进行梯度区分,去掉高光和投影色,通过渲染最主要的关键特征,包括不同于真实感渲染的艺术化光影效果以及轮廓描边,并将物体受光照的颜色从多色阶降到低色阶,减少颜色的丰富程度。

图1 卡通着色器效果图

1.2 毛发物理

在“unity-chan!”插件中,实现了头发随运动者的物理状态进行自由拟真摆动,同时实现了毛发体积碰撞,在理想情况下可以防止头发和身体的碰撞器穿模。该插件组件参数调整起来难度很大,完全模拟毛发物理效果还是比较难的。

1.3 动态天气系统

系统的一些较为开放的场景采用了“TENKOKU Dynamic Sky”插件,该插件通过丰富的参数设置非常方便的实现了动态天气系统,会根据时间和时间缩放来随意控制天气变化。插件同时实现了天气变化带来的环境变化,包括了光照变化、太阳光运动阴影变化、环境音效、随机天气效果等技术。其中使用了动态的天空盒来计算光照角度和云雾变化,同时雨水、雪花、风速效果并非是粒子特效,而是真实的物理效果,可以和游戏物体进行交互,图2 为两张同时间流逝下的天气变化图。

图2 动态天气效果对比图

1.4 角色扮演摄像机系统

“Simple RPG Camera”这个插件是专门为RPG 游戏的摄像机设计的,3D 游戏的角色摄像机需要与角色操作进行绑定,使用基础的摄像机和代码控制会显著增加系统耦合,因为摄像机系统受多个模块操作影响,如技能释放无法运动,打开UI 锁定旋转和鼠标等。该插件将这些操作分离出来,摄像机并非绑定在玩家身上,而是作为一个物品单独存在,这样在角色控制器上不必花太多的时间去写摄像机逻辑,同时减少了控制层级逻辑代码量和可控参数。

1.5 粒子特效集合

游戏中使用了大量的特效插件,包括卡通特效、魔法特效(带动作集合)、武器拖尾特效等,增加游戏玩法和画面表现。特效部分属于美术模块,这一块的执行流程是先获取大量的特效资源,之后根据需求筛选和调整特效。

2 游戏引擎技术

2.1 动画控制器和融合树

Unity 引擎中的动画状态机,使用“状态模式”的设计模式来完整各个动作状态的转换,将代码图形化、更方便操作。

此外在一定情况下,玩家会同时处于多个状态的融合,比如玩家会同时向后和左运动,或者向前跳起来,若使用代码实现融合情况下的状态模式,是非常复杂的,动画控制器提供和状态融合树,如图3。融合树一般会有多个维度,一般提供1、2、3维度,每个维度需要提供相对于个数的参数,这些参数来控制当前状态在哪些状态之间。

2.2 反射组件和底层抽象

技能系统作为动作游戏中最为复杂的一部分,由于状态很复杂,包含了技能动作、技能数值、技能释放、特效跟随、攻击判定等多个流程,结合反射和抽象实现了多个职业的不同技能释放和判定,并具有一定的拓展性和维护性,核心是反射添加组件和底层抽象。

图3 状态融合树

结合输入系统和技能快捷栏,系统可以很轻易地知道当前玩家释放了哪种技能,结合之前的数据表配置,只需要知道玩家释放的技能ID,就可以知道当前技能的全部信息,包括自定义的类名,通过名字组合(职业+技能类型名)得到当前技能类的名字,通过反射并让技能类继承祖MonoBehavior 就可以将技能作为组件添加到玩家预设上。

抽象出来的技能不分职业和数值,针对抽象进行设计,无非就是释放和销毁,而在释放的过程中会有特效,所以将特效也抽象出来,每一个技能释放时都会包含一个抽象的特效类,其都有派生类实现,在增加新的技能时,只需要继承技能父类即可,并实现虚函数和抽象方法。

2.3 光子服务引擎

光子服务引擎采用配置形式启动,将动态链接库代码写入Windows 服务中,开发的服务端代码在服务中运行的好处就是,避免状态切换被系统进程关闭,运行更安全,可自由分配系统资源[4]。光子服务器自带了日志系统,可以对不同的服务器进行分离式记录,并按天对日志文件进行拆分管理,使用特有的日志软件进行读取。

3 结论

游戏开发技术不仅需要计算机相关研究人员,也需要艺术、文学、哲学以及数学工作者的参与,游戏美术描绘了游戏表现,游戏音乐烘托了游戏氛围,心理学、哲学洞悉了玩家内心,游戏文学阐述了玩家游戏情节,数学模型用以提升游玩反馈。诸多行业参与进游戏开发,所以这个行业作为IT 行业是一个融合技术与艺术的热门行业。

猜你喜欢
插件摄像机状态
基于CTK插件框架的太赫兹人体安检系统软件设计
自编插件完善App Inventor与乐高机器人通信
状态联想
基于OSGi的军用指挥软件插件机制研究
生命的另一种状态
基于jQUerY的自定义插件开发
新安讯士Q6155-E PTZ摄像机
安讯士新AXIS M31网络摄像机
坚持是成功前的状态
如何消除和缓解“摄像机恐惧症”