魔幻3d游戏

2023-01-27 版权声明 我要投稿

第1篇:魔幻3d游戏

3D街机游戏系统研究与应用

摘要:针对当前国内街机游戏开发难度大、难以移植、开发周期长的问题,提出Unity3D引擎结合Android平台技术的街机开发方案。该项目用Unity3D引擎开发一款游戏,完成Android系统与Unity3D的数据交互、添加NGUI事件源,从而实现外部硬件设备控制游戏及游戏中的交互界面。针对厂家生产需求开发一个安卓系统桌面启动器并监听Android开机广播实现开机启动游戏,预装游戏软件实现系统集成。实践表明该系统完成度高,该开发方案开发效率高,在街机游戏开发和应用方面有一定的推广应用价值。

关键词:街机游戏;Unity3D;NGUI;Android; 安卓系统桌面启动器

Research and Application of 3D Arcade Game System

DENG Zeng-qiang1, ZHU Zheng-tao1,LONG Shi-jun2

(1.Guangdong University of Technology, College of Information Engineering,Guangzhou 510006,China;2.Longsys Electronics Company Limited,Shenzhen 518057,China)

Key words:arcade games; unity3d; ngui; android; launcher

1 概述

街机是置于公共娱乐场所的经营性专用游戏机[1]。1971年麻省理工学院学生诺兰.布施内尔设计了世界上第一个业务用游戏机开始,街机这一名词开始出现[2]。20世纪80年代街机游戏开始蓬勃发展,到21世纪初,期间出现了众多优秀的街机游戏。随着计算机技术的发展,各种形式的游戏开始涌现,如:PC游戏、手游、电视游戏等,这些新兴的游戏方式冲击着街机游戏市场。然而,街机游戏的临场感、操控感和体验感是PC游戏和手游等无法比拟的[3]。由此,街机游戏还是拥有数量可观的玩家用户。但作为开发者和厂商来说,街机游戏并不欢迎,其原因主要是开发方式难、硬件成本高、一台机器只能运行一个游戏。

随着Android平台和Unity3D游戏开发引擎的出现,街机游戏的开发方式也出现了新的可能。Android平台是开源系统,其开放性和广泛的硬件支持的特点吸引众多的开发者进行游戏开发[4]。为简化游戏开发,选用Unity3D游戏引擎,该引擎有良好的跨平台特性、打包发布简单、良好的移植性的特点,开发者无需了解底层技术即可进行开发,大大缩短了开发时间周期[5]。Unity3D 中整合如地形创建工具、碰撞检测和灯光渲染组件、粒子系统、物理引擎、常用脚本等丰富的开发资源。同时,还在Mono Behavior这个类库中为开发者定义了各种实用的方法,从而为开发提供了更大的方便[6,7]。本项目以Unity3D技术为基础,实现一款街机游戏,以Android技术为辅助,实现游戏控制和系统集成。该系统为解决街机游戏开发困境提供一定的引导和参考。

2 设计内容概述

该项目为一款针对儿童用户的安卓平台游戏,采用三维游戏风格,最终将游戏集成到安卓源码,实现自定义安卓系统桌面启动器(launcher)和针对游戏软件的开机自启。系统主要模块包括两部分:客户端游戏软件模块和安卓系统集成模块。

2.1 游戏玩法介绍

游戏设置有三个场景:草原、雪地、海岛,每个场景跑道都设置有路障。玩家使用操纵拉绳操控马匹,在限定的时间内与电脑马匹竞赛,玩家可以操控马匹加速,限定時间倒计时结束判定玩家马匹在跑道上的位置进行排名。游戏流程如图1。

图1 游戏过程展示

游戏操控方式通过马匹上左右两条缰绳控制左右移动,同时拉两根缰绳表示主角跳起,而在交互界面场景中表示“确定”,马身一个按键控制主角加速,机箱处留有投币处和商家进入后台参数设置界面的按键。

2.2 主要模块及功能

客户端软件模块是软件的主要模块,是直接影响玩家用户体验的重要部分,该模块使用C#编写游戏逻辑和交互界面。在Unity3D游戏引擎中导入游戏需要的场景资源:图片素材、角色模型、场景模型、音乐资源、字体等,编写脚本代码控制游戏逻辑,例如:角色行为控制、AI寻路、UI等。

生产厂家在生产中有硬件制作、系统镜像烧录、游戏安装等过程。然而,这样每次机器运行需要选择游戏应用图标进入游戏,大大增加了操作复杂度,不符合街机生产需求。针对这一情况,笔者将游戏APK(Android Package)预装到Android系统中,并开发一个launcher替换系统原生launcher,由此launcher启动游戏。基于以上描述可得项目关键模块框架如图2。由于篇幅限制,本文对开发过程中模型导入、粒子系统、Android源码编译等不做描述。

图2 游戏总体框架图

3 系统关键模块技术及实现

3.1 控制功能模块

区别手机游戏触摸控制和PC游戏的键盘控制,本游戏依赖外部硬件设备,通过串口数据通信与Android平台进行数据交互。

Unity3D与Android数据传输的方式有多种。可以在Eclipse中编写所需的Android平台功能,以库文件的形式在Unity3D中使用;也可以将Unity项目导出为Android项目,然后编写Android程序,两种方式都可实现数据传输,只是实现过程有区别。本项目以Unity3D为主,将Eclipse的功能制作成插件集成到Unity3D中,其原理是使用Android NDK將C/C++编写的代码编译成.so文件后,在Unity3D中用C#代码进行相互调用,具体实现方法为:

1)使用Eclipse创建一个库文件工程;

2)在Eclipse中编写串口操作,遵循普遍串口操作规律,实现打开串口、读写串口、关闭串口,继承UnityPlayerActivity实现Activity与Unity对接,并封装一系列的方法来为Unity3D提供访问串口读写数据的接口,然后输出.jar格式库文件,代码片段:

public String getJumpPass()

{return jumpPass;}

public void setJumpPass(String jumpPass) {this.jumpPass = jumpPass;}

3)复制AndroidManifest.xml、.so文件、.jar文件到Unity3D目录Plugins/Android下,重新设置AndroidManifest.xml中activity名称,使之与Eclipse工程中activity一致;

4)Unity3D创建SerialPortData.cs脚本访问.jar库。在Start()函数中获取Android的activity,从而访问.jar库文件中传来的字符串数据,据此判断玩家或商家做出的操作;

void Start(){

AndroidJavaClass jc=new AndroidJava- Class("com.unity3d.player.UnityPlayer"); activity=jc.GetStatic("currentActivity");}

在Update()函数中每帧刷新一次,检测是否有新的操作,代码片段如下:

void Update(){

string coin=":020"; //投币信号

string jump=":290"; //上跳或者确认

string left=":210"; //左操作

string right=":220"; //右操作

string accelerate = ":230";//加速信号

string bkEnter = ":240"; //后台信号if(activity.Call(“getJumpPass")==jump)

{activity.Call("setJumpPass","");

isjump = true;}}

其中”:290”等是串口通信协议,利用AndroidJavaObject的Call()方法获取串口数据,通过比较字符串确定操作是否成功。

3.2 交互界面实现

游戏中涉及的界面操作有玩家选择场景界面和商家后台参数设置界面,界面设计采用NGUI插件。NGUI[8]是专门针对unity引擎,用C#语言编写的一套插件,相比较unity3D原生引擎GUI和NewGUI系统功能更强大、操作更方便,它提供了强大的事件机制,通过UICamera监听UI事件并分发事件,事件覆盖此camera渲染的GameObject。游戏中玩家投币达到商家设定的数量后,游戏进入场景选择界面如图3。

图3 场景选择界面

UICamera监听的事件源有鼠标、键盘、触屏和手柄。而本游戏控制依赖外部硬件设备,通过串口输入与Android系统通信,UICamera事件源并不包括串口控制方式。因此,通过UICamera.cs中Update()添加事件源,Notify()分发事件处理函数的方式对NGUI做二次开发,左拉缰绳操作事件代码:

if(SerialPortData.leftpull)

{SerialPortData.leftpull = false;

currentScheme=ControlScheme.Controller; Notify(mCurrentSelection,"OnSignalLeft",null);Notify(editActiveValue,"OnSignalLeft",null);}

其中Notify封装SendMessage方法分发事件,参数一为接收消息的游戏对象,参数二为函数名。为了使操控效果美观,添加WrapContent脚本实现无限滑动效果,添加UIKeyNavigation定位UI。当监听到控制事件,立即转发到对应的处理函数,函数片段:

public class NewUIKeyNavigation : UIKey- Navigation {void OnSignalLeft()

{if (!NGUITools.GetActive(this)) return;

GameObject go = null;

go = GetLeft();

go.GetComponent().O-nClick ();if (go != null)

UICamera.selectedObject = go;}......}

街机游戏每局需要的投币数量是商家设定的,此时就需要定制一个后台参数设置界面如图4。参数包括:中英文切换、游戏时长、每次游戏需投币数目、背景音乐开关。

图4 后台设置界面

后台设置使用Unity3D提供的Player- Prefs類持久化保存和读取数据,该类以键值对的形式将数据保存在本地文件中,保存成功后通过“键”访问数据值。

3.3 寻路AI

游戏AI设计是评价一个游戏可玩性的一个重要指标,本游戏使用AI是寻路AI。Unity3D中常用的寻路AI算法有A*(A-Star)、导航网格(NavMeshAgent)、路点寻路。

A*算法是目前用来解决静态网格求最短路径问题最有效的算法[9]。普通搜索算法,如广度优先和深度优先算法,通过遍历所有解从而去寻找最优解,当解的数量过多,普通算法效率过低。A*算法使用启发式搜索算法,对每个搜索位置进行评估,提高搜索效率。A*算法适用地图类型为静态网格的游戏,所以必须是先设计好属性固定不变的地图,且必须已知起点和终点,本游戏角色在场景中起始位置确定,但终点位置不定,所以A*寻路不适用本游戏。

导航网格[10](NavMesh)寻路方法是Unity3D自3.5版本起增加的内置插件。其原理是通过烘焙将地形的信息记录起来, 游戏物体挂载NavMeshAgent组件,导航物体便会自行根据目标点来寻找最直接的路线,并沿着该线路到达目标点。角色会绕过或者跳跃过各种复杂的障碍,找到一条理论上“最短路径”。在本游戏中这种方式实现自动寻路会存在很多不定的因素,如场景道路边界存在拐点,自动寻路时移动角色会紧贴拐点移动,并不适合路径随机、移动平滑等需求,导致游戏可玩性不高。

路点寻路方式是在地图场景中设置一些节点并且构成连通的网络区域,每一个节点表示一个路点(WayPoint)[11],游戏角色沿连通的网络线移动,该路线由开发者设定,并不是最优路径,而且游戏角色每次穿过一个路点时产生一个随机小角度起始方向角度并沿该方向寻找下一路点。路点寻路方式适合用于大地图场景,而且对系统消耗更小,实现方法简单有效。综上,本游戏选用路点寻路AI,其具体实现流程为:

1)在场景地图上设置路点,为路点添加sphere碰撞体,并设置tag标签“playerways”,并将路点对象按顺序放进程序定义的public数组中;

2)通过OnTriggerExit(Collider other)函数判定当前路点索引值;

3)以一定的速度朝下一路点移动,如果到达最后一个路点并且游戏时间未结束,则将数组索引置零,方式如下:

if(NUM==waypoints.Length-1) transform.LookAt(waypoints[0]);else transform.LookAt(waypoints[NUM+1]);

图5 路点寻路示意图

3.4 系统集成关键技术

Android桌面就是一个应用软件,管理所有已安装的应用。实验中发现,通过系统原生launcher启动本游戏会在桌面停留,影响系统流畅性。由此,笔者自定义launcher,替换系统原生launcher,并屏蔽桌面界面。Android系统开机会发送一个开机广播,在自定义launcher的AndroidManifest.xml文件注册接收开机广播,并设置其为开机启动程序。编写脚本继承BroadcastReceiver,实现通过游戏APK包名启动游戏。

前文提到为厂家生产方便,需将游戏预装到安卓源码,并裁剪安卓源码,缩小系统镜像包体,加速镜像烧录,最终厂家只需要硬件平台和预装了游戏APK和launcher的镜像。预装中注意将游戏APK中的库文件放在device/softwinner/fiber-commom/prebuild/-apklib文件中,将游戏APK放入prebuild/ preinstall-apk目录下,并修改该目录下的Android.mk,对该apk进行申明。自定义launcher替换原生launcher时应删除原生launcher,并在当前文件夹下Android.mk文件中声明添加LOCAL_OVERRIDES_PACKA- GES := launcher2;否则第一次开机需要选择launcher启动器,系统不连贯。

4 系统展示

整个街机游戏系统从开启,如图6(a)到进入游戏,如图6(b),总共耗时35秒左右,系统运行流畅,无卡顿闪退等情况,投币、角色控制、后台控制等功能准确有效,交互界面简洁实用,整机如图6(c)。

图6 街机游戏整体效果图

5 结束语

本文就以往街機开发方式困难、开发成本高的问题,提出一种结合Unity3D游戏引擎和Android平台技术的街机开发方案,为突破以往街机开发方式,提出新的方案,具备一定的推广应用的价值。整个街机系统符合生产需求和游戏本身的设计需求,达到预期效果。当然,本游戏在游戏内容设计和优化方面稍显不足。目前,只有预装一个游戏。因此,后续可以开发更多游戏并开发一个安卓应用来管理这些游戏,丰富街机内容。

参考文献:

[1]刘卓.电子游戏的娱乐体验与交互设计[D].无锡:江南大学,2008.

[2]王峥.试论电子游戏与社会的互动[J].哈尔滨工业大学学报:社会科学版,2005,7(4):26-30.

[3]唐洁.VC++2008开发网络百家乐游戏[J].电脑编程技术与维护,2011,13(10):68-78.

[4]寿柏炎.基于Android平台软件开发方法的研究与应用[J].计算机光盘软件与应用,2013(01):244-245.

[5]袁田琛,胡新荣,赵俭辉.基于Leap Motion和Unity3D的体感游戏开发与集成[J].电脑知识与技术,2015,11(13):201-204.

[6]刘冬梅,宋平,邓英芝,等.基于Unity3D的"林大的松鼠”APP的设计与实现[J].智能计算机与应用,2015,5(2):80-85.

[7]谷敏,康雪丽.数据驱动的Unity3D场景约束框架的分析与设计[J].电脑知识与术,2015,11(30):180-183.

[8]相茂英,马纯永,韩勇,等.基于Unity3D的化工设备虚拟培训系统研究[J].计算机技术与发展,2014,24(07):196-200.

[9]周小镜.游戏地图中寻找路径的改进算法研究[J].信息技术,2010(12):125-127.

[10]Sturtevant N R,Buro M.Improving Collaborative Pathfinding Using Map Abstrac//AIIDE[C]. Marina del Rey, California: Proceedings of the Second Artificial Intelligence and Interactive Digital Entertainment Conference, 2006:80-85.

[11]臧晓强.手机游戏AI引擎设计[D].延吉:延边大学,2008.

作者:邓增强 朱铮涛 龙诗军

第2篇:基于unity3d的FPS训练游戏设计与开发

【摘要】  随着游戏设计和开发的发展,第一类射击游戏发展迅速,国内外都有其开发的理论和技术。第一人称射击游戏的设计和来发面临新的挑战,从游戏场景设计、角色设计到色彩关卡的设计都影响玩家对游戏的吸引力。因此,如何更好地设计和开发第一类射击游戏是FPS游戏设计和开发面临的首要问题。随着计算机网络技术的不断发展,移动平台成为目前最火的游戏开发平台,移动设备的提升也让游戏的研发朝着3D游戏的方向发展,所以本文基于unity3D引擎开发设计第一人称射击游戏。基于unity3D引擎完成游戏设计中的关卡模型和全部的游戏场景造型设计,包括绘图、光影效果以及网络寻路系统等。

【關键词】  unity3D 第一类射击游戏 场景设计

1. 引言

FPS游戏是随着计算机产业的发展同步发展的,目前FPS不仅在游戏的创作还是在游戏的受众方面都和其他类型的游戏有着明显的不同。随着全球游戏产业的发展,FPS游戏系统的开发已成为大家关注的话题。

此外,随着互联网技术的发展,移动平台成为目前最为火热的游戏开发平台,具2015年数据统计,我国手机网民的规模已经达到了6.2亿人,其中手机网络游戏的用户人数已经达到了2.79亿人,手机游戏的使用率已经达到了45.1%。由此可见手机游戏是未来游戏行业发展的主要方向。目前的手机操作系统主要为Android和IOS。随着手机硬件和网络传输技术的不断发展,为手机游戏的扩展创造了更多的发展空间,目前手机游戏已经成为增长最为迅速的碎片时间娱乐方式,此外也吸引了很多国内外的游戏研发企业投入到手机游戏的设计和开发中。

手机游戏主要分为2D和3D效果,随着游戏场景和玩家体验的需求,3D游戏发展迅速。为了提升玩家对游戏的喜爱感,训练游戏的设计是非常必要的,通过训练游戏可以让玩家提前适应游戏的场景和游戏规则,进入正式游戏后可游刃有余的进入状态。而射击训练游戏的设计不仅仅要注重场景的设计还有注重音效、色彩以及射击效果的设计。因此,在FPS训练游戏的设计和开发中应用unity3D平台设计完成具有较大的优势。本文在FPS游戏发展现状上,基于unity3D设计开发FPS训练游戏。从场景设计、画面效果、灯光造型、音效效果以及道具造型等方面为第一人称射击训练游戏的设计提出了可行性的建议。

2. 基于unity3D引擎训练游戏场景设计

unity3D是一个综合的游戏设计和开发平台,为游戏的开发者提供了多套游戏设计的解决方案。尤其是针对美术开发人员,不需要程序代码,就可以利用unity3D引擎设计实现具有高品质的FPS训练游戏画面,因此,提高了美术开发人员的设计效率,大大的缩短了游戏设计和开发的周期。

2.1 unity3D引擎FPS训练游戏场景设计流程概述

unity3D引擎提供了一种可视化的图形操作界面,因此游戏开发者可以根据unity3D引擎提供的设计方案设计和实现FPS训练游戏所需要的画面效果。首先,第一步是创建一个项目文件夹。第二步:将FPS训练游戏场景的资源导入到unity3D引擎中。第三步:在unity3D中,创建FPS训练游戏场景模型的材质。第四步:在unity3D引擎中,设计游戏场景的灯光照明系统。第五步:设计烘焙光照贴图。第六步:在unity3D引擎中,为FPS训练游戏场景设计实现导航网络的寻路系统。

通过上述流程设计完成FPS训练游戏场景的设计,下面分别介绍各个流程的功能和设计过程。

2.2 unity3D引擎FPS训练游戏场景设计流程

(1) 项目文件夹

每个游戏的设计都需要创建一个独特的项目文件管理方式,在项目开发的初期就要针对FPS训练游戏的特点制定符合特点,高效的项目管理之星方案。在本项目中创建FPS训练游戏的工程文件夹,并且针对美术、策划以及程序进行项目分类和分支管理方案。其中,分类管理可以让游戏设计团队的leader得到有效的测评、验收以及本团队开发人员资源的管理。分值开发的制作,上传和共享能够提高资源的利用效率以及开发人员的工作效率。

(2) FPS训练游戏场景资源导入

导入的场景资源主要包括游戏的模型以及贴图。游戏场景的设计所展示的是游戏的画面、游戏的风格以及游戏开发人员制作的水平。同时这些也是这款FPS训练游戏的游戏卖点。所以在FPS训练游戏场景资源导入该游戏项目工程文件夹之前,必须要严格的按照游戏项目制作以及游戏验收标准来后执行游戏场景资源的验收。并且该游戏项目的验收标准要针对专门的游戏运行平台以及性能而制定。在FPS训练游戏中其场景资源主要包括模型和贴图两部分。

其中场景模型可以分为静态和动态物体两种。静态物体指的是不包含动画数据的物体,比如游戏场景中涉及到的建筑、地面生活用具等。而动态物体通常适用于活动元素的设计,如建筑物中的机关,主要的角色人物,动物以及载具等等。除此之外,游戏场景模型还包括用在特殊模型设计中的物理引擎计算的碰撞体,主要应用在部分的模型碰撞體的设计中,将其定义为网格碰撞体。其主要应用的场景是复杂的室内建筑物或者是破坏掩体中,也可以用在多边形模型的设计和开发中。

训练游戏场景的贴图主要包括通用贴图、地面贴图、透明贴图、发光贴图和天空贴图等。在场景中如果有水面的设计那还要增加相应的水面贴图以此类推。

(3) 创建场景模型材质

在unity3D引擎中建立模型对材质有一些特殊的要求,unity3D引擎支持Max、Maya这些主流的三维软件材质,此外,在FPS训练游戏的开发和设计过程中为了确保版本的质量和游戏开发的稳定性,要在模型资源导入后对材质进行重建或者重写。在unity3D引擎中的材质会直接关系到FPS训练游戏场景的渲染以及游戏的性能。

unity3D引擎在场景材质的而选择和使用中对其数量有严格的规范和限制。对于unity3D引擎的渲染特性来讲,通过降低材质的使用数量来降低渲染调用的次数。所以在FPS训练游戏的场景材质制作中,要根据贴图的数量创建材质的个数,然后在通过特殊物件的特点创建专业的材质。通过这种方式可以减少材质的使用数量,还可以提升材质的使用效率。

(4) 灯光及照明系统的设计

unity3D引擎在灯光的设计中和目前主流的三维游戏软件的灯光类似。在游戏场景的设计中,灯光是非常重要的一部分,定义了游戏场景的颜色和氛围,因此可以影响FPS训练游戏整体的视觉效果。在unity3D引擎中主要分为四种不同类型的灯光分别是方向光源、点光源、聚光灯和面光源。第一种方向光源被放置在无穷远处,对整个场景中所有物体都有影响,因此类似一种日光灯的照明效果。点光源指的是从一个位置向多有方向发射光纤,因此这种点光源的影响的是范围内所包含的对象类似于灯泡的照明效果。在点光源中阴影部分是最耗费图像处理资源的,所以在游戏场景的灯光设计中很少使用点光源。聚光灯指的是从一个点想一个方向发射的光纤,其照射范围是锥形的,在锥形范围内的对象会受到光线的照射,这种光源类似于射灯照射的效果。面光源的光源则无法应用在实时的照明中,因此只适用于光照贴图烘焙的场景设计中。因此,游戏场景的设计中各种光影的效果是通过上述几种光源的理解和运用实现场景灯光照明的设计效果的。

(5) 烘焙光照贴图

在unity3D引擎中,对游戏场景灯光照明系统设计完成后,要完成游戏烘焙光照贴图,这个过程也被称之为是创建光照贴图。也就是将FPS训练游戏场景中所有的灯光照明信息都烘焙成为一张或者多张贴图并且是针对静态场景设计的一种光照效果技术。通过这种方式可以增强训练游戏场景的光影效果的质量,并且能够有效地减少训练场景对灯光系统内存资源的消耗,提升游戏的运行性能。

(6) 导航网格寻路系统设计

在FPS训练游戏中,非玩家控制角色能去那些游戏场景和导航网格寻路系统的设计紧密相连。

2.3 unity3D引擎FPS训练游戏场景色彩设计

(1) 游戏场景设计中色彩应用的原则

色彩节奏及细节。游戏场景的设计非常注重节奏感,不单单是一章画面的节奏,更多的是整个游戏场景体验的节奏。色彩元素排列的疏密,颜色的转变等都能改善游戏场景设计的节奏。如在《风之旅人》写实类的游戏中运用了法线贴膜的效果,让环境的色彩更加真实,让水面物体的反光效果更好,营造出气氛更是和玩家。

游戏场景中的色彩节奏主要指的就是画面调度。我们把色彩靠近亮部的部分称之为是高调,而靠近暗部的部分称之为是低调。介于两者之间的部分称之为中调。配色的明度反差较大称之为长调,反差较小称之为短调,两者之间的称之为中调。

在游戏场景的设计中,由上到下使用了长调—中调—短调,再有短调—中调过度到长调的节奏设计过程。色彩与游戏画面的节奏,恰当的配合,让玩家在玩的过程中有愉悦的审美感受。色彩在游戏场景中会给人直观的联想和象征。浅色会跟人一种密度小、质量轻的感受,而深色会给人一种密度大、质量大的感受。对于体积大的物体,涂上深色(黑色)和浅色(白色)后,黑色所产生的心理重量比白色多2倍左右。因此,在色彩重量的运用中,可以根据游戏场景的重量感来突出游戏场景以及游戏道具的特点。

在这个游戏场景的设计中,深色使用的比例大于浅色使用的比例。通过这种颜色的比重来增加游戏场景的阴暗紧张氛围,给玩家带来压力,表明进入挑战模式,让玩家集中注意闯关以此来烘托游戏的氛围和游戏环节的特点。

简洁统一明快的色调。游戏场景色彩的应用中有很多不同的风格,可以是幻想色彩,写实色彩,卡通动漫,也可以是多种风格的融合。任何一种色彩风格只要实现了风格的统一,都能够吸引玩家。此外,任何一个游戏场景色彩的成功都需要对色调进行精简。干净明快,对比强烈的色调关系会让玩家对游戏的场景和故事情节一目了然。

冷暖色系合理搭配。在游戏场景的设计中,创作者对场景色彩的使用会受到现实条件的限制,而游戏场景色彩的设计中却能够构造出一个完全服务于玩家的虚拟场景。一个优秀的游戏场景设计不仅仅有统一的风格,还能带动游戏情结的发展,增加游戏的趣味性,通过象征的意义来烘托游戏的主体,渲染游戏的氛围,表达觉得的情感,吸引更多的玩家。游戏场景设计中,色彩能给人最直观的心理暗示,因此,合理的使用色彩能够让游戏的故事情节和主题在有效的时间内传递给玩家。一般情况,红橙黄这些暖色系的游戏场景会跟人一种非常温馨、活泼和悸动的视觉效果。

在上述游戏场景之中,暖色为主的游戏场景中,点缀了一些冷色的蓝色。可以起到醒目突出重点的作用,提醒注意。蓝色的部分为人物跳跃的落点,只有落在该区域才不会调到蓝色的水中,游戏才可以继续。暖色会给人一种非常温暖的热血沸腾的感觉,游戏中的打斗技巧还有动作等等,色彩较为适合。和暖色相反的是冷色游戏场景的设计。

冷色的主要色彩是蓝色,蓝色的游戏场景给人的是一种宁静和冷酷的感觉,这样的场景最主要的就是不能运用比较亮的色彩进行曝光,冷色本身就会给人一种非常刺眼的感受因此冷色和暖色之间搭配协调才可以突出效果哟,否则单一的冷色太单调,可以在游戏中先处理部分色彩的纯度之后再去协调整个画面的场景。

(2) 游戏场景设计中色彩的表现手法

在前期游戏场景设计的草图中,应将重点放在色彩的表现上。色彩的表现特性主要包括:烘托主题的整体色彩,色彩的层次和色彩节奏。其中整体色彩值得是游戏场景中所占比例较大的色彩也就是场景的基调。要具有明确的场景基调才能塑造出风格统一的游戏风格。游戏场景色彩基调的不同,会带给玩家不同的画面感。

色彩的层次感主要指的是游戏场景中颜色的对比关系,冷暖的对比,虚实的对皮,明暗的对比,面积对比,色相对比等。产生色彩对比的方式有很多,随着角色空间的变化,在一个场景中可能存在不同的冷暖对比,明暗调节以及纯度的对比变化。

色彩的节奏感对游戏场景的设计也很重要,色彩的对比由弱到强能够调动玩家的积极性,让游戏情节升华。色彩可以表达情感,在游戏场景的设计中要根据色彩在玩家心理所产生的联想合理的安排色彩所产生的冲突。比如黄色是色彩中最为明亮的会发光的色彩,所以黄色会给人一种勇猛,光明正义的人物形象。在黑暗的环境中用黄色可以表示灯光,带来希望。而红色是一个较为纯正的色彩,会给人一种不可抗拒的力量,并且红色和血的颜色相同,会带来一种恐惧感。此外,同一种颜色也有正反相反的含义,所以要正确的掌握色彩冲突以及色彩对比带来的情感变化,让游戏场景的氛围更具有视觉的冲击力,吸引更多的玩家。

3 . 基于unity3D引擎训练游戏场景实现

3.1 关卡及原画设计与实现

(1) 关卡白盒

FPS游戏关卡设计的第一步就是关卡白盒的制作。关卡白盒指的是将关卡所发生的故事以及场所用三维的模式呈现,也就是关卡白盒是对美术的一种三维立体化变现。

在FPS训练游戏场景白盒设计中采用两种方式分贝是借鉴和原创。借鉴通过类似款优秀的游戏场景为基础,制作在游戏过程中白盒的设计。此外,通过原创关卡白盒设计能够让设计的游戏场景根据特点。白盒三维视觉效果的实现要通过unity3D引擎完成面积和建模。首先要熟练使用关卡编辑软件制作关卡白盒的过程。在设计实现过程中使用关卡编辑器中简单的多边形创建游戏的白盒。用白盒创建游戏所有关卡便于在所有区域内完成系统游戏关卡的测试,此外也能够确保所有关卡的比例分配和位置关系更加准确。时候起游戏场景细化和制作的主要参考依据,此外也是关卡的基本结构。

(2) 原画2D

在关卡白盒设计实现完成后就开始设计实现2D原画。在此过程中和动画制作有很大的不同,在动画中并没有白盒到2D的转换设计,而是从概念直接到场景的具体设计,会存在较大的风险。而通过白盒的设计再到2D原画的设计能够通过制作人的制作,策划人的策划以及架构师的构架不断的讨论验证的确定的方案。在白盒确定后,2D原画可在原画师的操作下通过编辑器设计关卡场景的视觉效果。通过合理的布局让整个游戏的场景布局更容易理解。

3.2 场景模型及贴图制作

(1) 游戏场景细分

确定关卡白盒和原画设计后,可以开展游戏场景的细分制作。在细分的过程中要梳理游戏场景的规模、复杂程度、室内和室外的数量以及需要制作的物件。按照从小大大,从整体到局部的顺序对场景细分,然后开始游戏的设计。在设计过程中,要确保场景设计的完整性。

1)体现关卡的通用性。在游戏中很多模型在各个场景中可以通用,尤其是一些建筑标志和植物等。游戏中通用性较强的模型使用的非常频繁,因此在制作中要优先考虑这些模型。

2)关卡设计要有較高的自由度。游戏有很多大小规模的场景,此外室外和室内的物件也有所不同,按照从大到小,局部到整体的方法将其分类,便于游戏场景设计素材资源的管理,可以提升游戏关卡设计的效率和设计的自由度。

3)便于游戏的后期宣传。在游戏场景设计中采取分类的制作管理方式,可以让设计任务水平完成在同一时间开展设计。并且在每个时间段内设计的进度都是透明的,降低游戏设计风险的同时也提高了游戏著作的效率和品质。

在白盒设计的基础上,按照原画的设定要求针对游戏场景的各个模型的结构开始游戏场景模型的制作。针对模型的布线要合理,并且可以增添设计的细节部分,对原画的还原比例要准确,然后进行游戏的贴图以及绘制工作。

(2) 游戏场景贴图制作

FPS训练游戏的贴图分为三张。第一章贴图的大小是1024像素的场景物件贴图,其中包括了训练游戏场景所需的建筑物以及各类物件的通用贴图。第二张贴图的大小是512像素的地形贴图。第三张贴图的大小是512像素的天空贴图。此外,还包括一些特殊的贴图,如在训练游戏中用到的装饰织物,灯光等特殊物件。这些物件要根据设计的需求单独的完成贴图的制作。

游戏贴图制作完成后,要将游戏模型和贴图导入到游戏的编辑器中。根据游戏策划设计的需求调整场景中物件和布局以及灯光效果,实现游戏的最佳设计效果。

3.3 材质及灯光设计和实现

FPS训练游戏的模型材质及贴图设计完成后,将模型和贴图导入到unity3D引擎编辑器中。通过平台完成游戏材质和灯光系统的设计。

(1) 材质制作及实现

FPS训练游戏中用到的材质主要包括水面、远山、天空盒和船并且使用的都是球。设计中材质和纹理的真实性尤为重要。在一些特殊的场景需要特殊的物体那么就需要单独的完成材质的制作。比如用到透明玻璃、发光灯和电缆等就需要根据给定的场景增加材质球。

(2) 灯光系统设计及实现

游戏设计中灯光是最重要的一项设计内容。网络的模型和材质纹理决定了场景所设计的质感和形状。光决定场景的明暗程度,色彩以及游戏所产生的氛围。在FPS训练游戏中使用的光源只有一个主光源其他都是一些辅助的光源和个别的补充光源营造游戏的分为。unity3D里面灯光采用的是静态物件烘焙的方式,为了让游戏场景的灯光效果达到最佳,在灯光设计时 要考虑到光源所耗费的图形处理器资源的大小,然后对灯光系统进行合理有效的设计。

FPS训练游戏灯光主要分为三种方式分别是自然光、人工光和两者结合的方式。游戏玩家活动主要为户外活动。所以在灯光设计中模拟真实的自然光。此外,场景灯光的变化较为复杂,因此,在灯光的设计中要分析场景照明的环境是怎样的,然后根据先主后辅的原则设计FPS训练游戏的灯光照明系统。

3.4 寻路系统的设计和实现

游戏寻路系统的设计通过navmesh导航网格技术实现,在3D游戏场景中是一种动态物体自动寻路的一种实现技术。可以将游戏中的复杂结构简化为一种具有一定信息的简单网格形式。然后在这些网格信息的基础上通过计算机算法实现游戏的自动寻路功能。在unity3D引擎中,需要给定导航的物体的导航组,然后根据设定的目标点寻求最佳的游戏路径,并且会沿着这个给定的路径找到游戏的目标点位置。下面,给出导航网格在FPS训练游戏中实现的步骤。

(1) 要生成导航网格。在此过程中,只需要生成主角以及NPC要走的导航网格即可,这样可减小Nav文件的大小,节约处理器资源。此外,要分层生成导航网格,并不需要设置不能走的游戏层。

(2) 并不是游戏的任何地方都需要生成导航网格,如果我们不需要用到该物件那么就不必要生成导航网格。当行网格不需要的地方设定为not Walkable即可,这样不会对游戏的导航产生任何影响。

(2) 针对透明的物件如灯光和花草植物。游戏角色可以直接穿过,此时要将导航网格中的navigation Static选项勾掉,此时,这个物件对导航不会产生任何影响。

4 .FPS训练游戏的虚拟体验

4.1 身体介入

FPS游戏可以让我们改头换面扛起机关枪体验现实生活中不可能发生的战斗。现实社会中人的肉体在道德和法律的层面上是不可触及的界限,是人类至高无上的生活法则。但是在虚拟空间里身体变得毫无意义。虚拟环境中,计算机替代人类的身体,人类的物理身体变成了游戏的主角可以体验全新的游戏体验,让人们可以重新审视自己的身体,在游戏世界中展现自己。

在FPS游戏中,人类是推广游戏的最佳选择。FPS游戏屋里身体退场意味着传统的道德和法律已经失去了原本的意义,游戏玩家具有一个隐性的斗篷可以在虚拟和现实世界中穿梭,但是他们并没有完全的进入真正的自由世界。而FPS游戏能够将游戏和身体练习在一起,让身体没有退路真正的融入到游戏中。

4.2 沉浸游戏

FPS游戏中基本没有设定好的角色,主角就是玩家本身,实现了你的游戏你做主。但是随着技术的发展,出现了很多FPS中设定好的主角,通过玩家不断的战斗得到更好地装备,吸引更强大的你得到更强大的武器装备。

此外,游戏的灯光,场景设计效果等也会吸引玩家展开更激烈的搏斗。通过关卡白盒的设计,让故事的情节更加吸引玩家挑战自己挑战极限,得到更好的战果,赢得更好地武器装备。

结  论

至此,完成了基于unity3D的FPS训练游戏设计和开发。在未来FPS训练游戏朝着视觉化的发展趋势线,给出了unity3DFPS训练游戏场景的设计流程以及场景色彩设计的方法。基于设计流程,给出了游戏场景的实现过程,包括关卡白盒和2D原画的设计实现、场景模型及贴图的制作实现、材质及灯光设计和实现以及最后的游戏寻路系统设计和实现。最后,从身体接入和沉浸游戏两方面阐述了FPS训练游戏的虚拟体验。

[ 参  考  文  献 ]

[1]王龙,任步春, 赵宸立.基于Unity3D的FPS教育游戏研究与设计[J].软件导刊, 2016, 15(11):79-81.

[2]胡磊. 基于Unity3D FPS游戏开发[J]. 电脑迷, 2018, No.100(07):112.

[3]徐嘉伟. 浅议单机类FPS游戏的细分[J]. 科技尚品, 2016(9).

[4]楊奎河, 郭东方, 李一. 信息不对等条件下人工智能在FPS游戏中的应用[J].信息通信, 2017(4).

[5]贺康.凤凰系统《键盘映射》v2.0, 打造最强安卓FPS游戏操作体验[J].计算机与网络, 2017(12):41.

[6]徐嘉伟, 傅佳. 浅析3A 级 FPS 游戏的美术设计师的开发分工及配比[J]. 科技创新与应用, 2013(1):49-49.

作者:李浩

第3篇:《君王3D》重现魔幻史诗经典 游戏宣传视频曝光

http:///news/youxishipin/2494130.html

《君王3D》重现魔幻史诗经典 游戏宣传视频曝光

今日,美峰数码正式公布了《君王3D》首部宣传片,片中选择在《君王3D》几个极具代表性的场景,将真实的打斗动作逐一展示,在磅礴的背景音乐下,更显《君王3D》魅力非凡。下面就让我们一起来看看这个魔幻世界的魅力吧!

视频中,官方重点介绍了本作的世界设定,同时还展示了职业角色和实际的游戏画面,此外官方还通过宣传片介绍了盟友系统等游戏系统方面的情报。

【无缝世界 王者大陆】

在宣传片中我们可以欣赏到风格不同的场景。熔岩与蛛网构建的凶险之地;荒凉破败的废墟之地;威严肃穆的主城,让《君王3D》的世界更为丰满。

http:///news/youxishipin/2494130.html

【真实打斗 自由走位】

视频最为精彩的就是各大职业的真实打斗。在短短的视频中,我们仅能一窥各大职业的风采。爆裂打击感,闪避、击飞、打断、连击Combo,每一次出手都经过精准的脑力计算,《君王3D》特别呈现痛快爆裂打击感,掌中极速微操还原真实打击体验。

http:///news/youxishipin/2494130.html

短短的宣传片仅仅暴露了游戏的少许内容,《君王3D》远不止这么简单! 以上就是手游汇小编为大家带来君王3D详解攻略,敬请关注手游汇。

第4篇:神奇的3D魔幻

聊城外国语小学五年级谢家昊

今天,寒风刺骨,妈妈带着我和弟弟、妹妹到开发区参加聊城晚报小记者组织的看“魔幻3D画展”。以前,我看过几部3D电影,真是惊险刺激,立体感非常强。

“到了、到了。”随着弟弟的呐喊,到了目的地,一下车,我们迫不及待地直奔目标——“3D魔幻展。”映入眼帘的是许多幅3D画。第一幅画是一只野兽之王——豹子。它从镜框里跑了出来,右脚狠狠地踩着一只旅行箱。这时,弟弟一屁股坐在地上惊讶的叫了一声:“大鲨鱼。”我和妹妹走过去一看,开怀大笑,“这是画,不是真的鲨鱼。”弟弟红着脸拍拍屁股站了起来。这条鲨鱼破框而出,张开血盆大口,样子怪凶猛的,我让弟弟钻进鲨鱼猩红的大口里拍照,弟弟提心吊胆的说:“鲨鱼会一口吃了我的。”妹妹说:“这不是真得鲨鱼,这么多人都在拍照呢?”弟弟战战兢兢的钻到了鲨鱼的口中。我赶紧按下快门“咔嚓”,我一看,嗨!太神奇了,简直是栩栩如生。接着,我又来到一幅画跟前,一匹在草原上奔腾的骏马。我骑了上去,仿佛成了一位率领千军万马的大将军,指挥军队抗击敌军。我又驾驭一条腾飞的巨龙,它把我带入魔幻的世界,带着我飞过一望无际的草原和浩瀚的大海。每张3D画前,我都留了影。我还玩了“坐马车”、“拳打鬼子”“亲亲耶稣”“美女洗澡”……

观看了3D画展,我感觉每一副画面都将带给人们不一样的震撼视觉,栩栩如生,身临其境,画面魔幻神奇。“百闻不如一见”为了能让你也体验到魔幻的感觉还是亲自去看看吧!

第5篇:奇妙的3D魔幻画展

兴化市实验小学二(4)班 蒋睿

星期天下午,风和日丽。我和妈妈一同去西子御园参观3D魔幻艺术画展。

刚进展厅,我被深深地吸引住了:张开巨嘴的鲨鱼、拿着手机给观众拍照的大猩猩、伸着脖子的长颈鹿、雄伟壮观的长城......一幅幅栩栩如生的画面让我身临其境,真是“人在画中游”啊!我都不敢靠近,更别提触摸它们了。

妈妈看出了我的心思,说:“儿子,你知道吗?3D画最早来源于国外,至今已有20多年的历史了。3D画常会使观众产生视觉上的错觉,又具有娱乐性,观众可以有创意地与画互动,所以很受人们的欢迎和喜欢呢!”

果然,我的手伸进蜂蜜罐掏蜂蜜吃,站在旁边的蜜蜂拿我一点儿办法都没有,只是干瞪眼。我刚站到大猩猩面前,他马上热情地给我拍照。我用食指轻轻一弹,墙壁裂开了,墙壁上的涂料掉了一地。“哎呀,我是武林高手了!”我高兴地跳了起来。接着,我来到其它画前,一一互动留影。

观看了3D魔幻艺术画展,我觉得每一幅画都给我带来了视觉上的震撼,还有美好的遐想。“百闻不如一见”,还等什么,快去看看吧!

第6篇:《大力神》今日上映 3D英雄爱情神话魔幻来袭

电影《大力神》主要聚焦于古希腊神话中最著名的英雄之一大力神赫拉克勒斯的起源故事, 影片除了着重描写了赫拉克勒斯成长转变的人物历程外还浓墨重笔的呈现了他与青春女神赫柏之间的一段纠结动人的爱情,以著名的希腊神话为背景展现了一场关于爱情、牺牲、人性的宏伟史诗。

古希腊的神话人物和爱情故事一直都被人津津乐道。爱江山更爱美人,哪个英雄好汉宁愿孤单,好儿郎浑身是胆,壮志豪情四海远名扬,纵然是肩负着拯救人类的使命的大力神也一样有七情六欲,同样会为爱痴狂。主演大力神的演员凯南·鲁兹由于早年间就做模特,身材健硕,所以与大力神的特性相符,再配上皮毛、金属材质的武装行头,意气风发、英姿飒爽,很有范儿。因出演《暮光之城暮色》中吸血鬼家族成员艾米特·卡伦而名气大增的他在演技方面也日臻成熟,很好的诠释了大力神英勇善战以及柔情似水的多面性格。女主角盖娅维斯是好莱坞的后起之秀,长相唯美典雅的她外貌气质十分符合美女赫柏的形象,尤其是身着古希腊传统服饰时绝对养眼。

以往我们看到的有关希腊神话的电影都是刻意着力描写英雄主义,这部全新拍摄的3D电影《大力神》把赫拉克勒斯人物身上的优缺点爱恨情仇都全面的剖析开来,让观众能更直 接深入的对大力神多样的成长历程和别样的爱情故事有新的认知和理解,这也是这部电影最大的魅力和意义所在,颠覆神话彪悍出击,壮阔史诗3D呈现,就像导演在访谈中说道的那样,他想塑造一个不一样的大力神,不仅是打打杀杀的铁汉英雄,他也有柔情的一面,也会在人性和神性间挣扎……

《大力神》今日起全国公映!

第7篇:阳光城集团凡尔赛宫3D立体魔幻艺术画展圆满落幕

10月1日至10月7日阳光城集团凡尔赛宫上演了一场趣味无穷的3D立体魔幻艺术画展,活动期间,阳光城集团凡尔赛宫营销中心天天齐聚上千爆棚人气。逗趣的名画,惊险的追逐,前来观展的市民们游走在各幅展画之间,大战凶猛恐龙,蟒蛇嘴里逃生,其乐无穷…….

天天齐聚上千爆棚人气

国庆小长假,大家都不愿意呆在家中,最火热的莫过于金融街的凡尔赛宫了。10月1日开始,专门为国庆小长假定制的“3D立体魔幻艺术画展”在阳光城集团凡尔赛宫营销中心启幕!每天齐聚上千爆棚人气,活动期间共有上万人次到访!最多的一天营销中心有近5000人次,人头涌动,每幅画前都围着一堆的人等着拍照,活灵活现的立体画仿佛真要跳出墙壁。小朋友们更是兴趣盎然,三五成群的穿越在每幅画前,绿巨人、恐龙、大蟒蛇……摆着各种各样的姿势,直嚷嚷着多拍几张,一旁的家长们也按捺不住好奇,和小朋友们一起玩了起来!

欢乐游戏 奖品抱回家

3D画展震撼视觉的体验,挖掘无限创意潜能;活动现场还有互动体验区妙趣横生的小游戏:幸运木马、球王争霸、愤怒小鸟、冒险投圈、蒙眼贴唇、水枪激战、充气城堡等等……据悉,此次活动不仅有的玩还有奖品拿!只见有个小男孩身旁已是一堆的礼品还是乐此不彼地活跃在各个游戏间,“这都是我自己赢的。”他自豪的说道。另外,现场还有卡通人偶、小丑叔叔与小朋友们一起玩转十一!国庆难得的假期,小朋友在这里度过了一个极具风趣的国庆长假,家长们则被阳光城集团凡尔赛宫的气质折服,不停地向置业顾问询问些信息……

法式奢宅 福州门第

13333元/㎡起抢金融街大三房,98-118㎡新品加推!【阳光城集团凡尔赛宫】坐享海

峡金融中心顶级配套,毗邻20余栋5A甲级写字楼、七大省级银行总部以及新政务中心。南侧咫尺台江万达广场,北侧紧邻新光明港公园,将打造福州最大的内河休闲公园,集休闲、娱乐、运动竞技等为一体的千亩生态公园。200亩社区,配套千亩超大光明港公园,城市稀缺资源,惟凡尔赛宫,寡占独有!邀请国际一流的贝尔高林(香港)国际景观公司设计营造法式宫廷园林,给阳光城集团凡尔赛宫的业主带来了更为惬意的生活,也为福州带来新的唯一地标风景。

第8篇:如何开发网页3D游戏

2013-03-20 22:02 129人阅读 评论(0) 收藏 举报

最近在网上突然冒出了一款3D的网页游戏,因为它使得我对网页中一些招人诟病的问题有了新的认识,让我产生了想要研究一下的想法。

想要制作网页中的3d游戏,有这样几个技术问题是需要考虑的:

网页插件实现

用户安装插件是否有阻碍

如何在插件中绘制3d图形

如何链接服务端

美术资源如何缓存

美术资源如何更新

浏览器兼容问题

本文就是来解答这些问题中的一部分,并且给出具体的实现方案。

ActiveX插件技术

目前浏览器的插件技术还是蛮多的,不过能够流行起来的不多。之前因为浏览器插件安全的问题,导致大部分人都对插件有十分的警惕。

ActiveX是微软提供的浏览器插件技术,wiki上的介绍:http://zh.wikipedia.org/wiki/ActiveX。我实在是难以搞清楚微软这些年来提供的几个技术之间的关系,OLE、ALT等,包括现在最新的.Net也是一样。要学习微软的这套框架,光理解其中的概念都需要花费非常多的时间,加上代码复杂,远不如开源技术来的直接和清晰。 我这里使用的是VS2005,新建一个“MFC ActiveX控件”工程。

根据向导,它会自动帮你创建一个后缀名为OCX的插件的工程。要调试运行,需要修改下项目属性,改成“ActiveX控件测试容器”,如下图:

这是一个工具,专门用来加载ActiveX控件,每次调试打开这个界面后,还需要手工点击菜单:编辑->插入新控件,找到你创建的这个OCX插件。如果在弹出的列表里面没有你制作的这个插件,就需要重新编译下(编译的最后会重新注册一次控件,当然你也可以用regsvr32.exe或者其他工具来手工注册)。

当你插入过一次之后,记得保存一下,下次你就可以在文件菜单的最近打开里面找到你保存的这个会话。

到此为止,你就可以用MFC的那套框架随意的添加各种MFC提供的各种功能,比如窗口、消息、事件处理等等。如果你学过Direct3D或者OpenGL,那么完全有能力在这个空的MFC工程中添加上相关的代码,跑起你自己的Demo来。

整合3D引擎:IrrLicht

本文的目标是开发3D游戏,自然不可能从图形API开始写起,我找来了IrrLicht这个开源的引擎,据我所知国内已经有由这个引擎开发的成功的商业项目了,那么也就是说是比较成熟了。关于引擎的介绍你可以访问官网:http://irrlicht.sourceforge.net/ 当前你也可以整合进其他的引擎,wiki:游戏引擎列表http://zh.wikipedia.org/wiki/%E6%B8%B8%E6%88%8F%E5%BC%95%E6%93%8E%E5%88%97%E8%A1%A8

IrrLicht引擎比较友好,编译过程中基本没遇到问题。切记,仔细的读一读文档和各个目录中的readme文件,这是程序员的一个好习惯。

我这里采用静态编译,正确编译后,在IrrLicht目录/bin/lib/下就会有对应不同编译器的目录,里面有编译好的lib文件。一般都会生成两个版本 Debug版:IrrLicht_d.lib,Release版:IrrLicht.lib。我会用不同的lib文件来编译我的不同版本的插件。

接下来再次配置插件的工程,这个很关键!在“C/C++”下面的“预处理器”属性页中,加入一个预处理器定义_IRR_STATIC_LIB_。

配置输入的静态链接库,给Debug和Release分别配置IrrLicht_d.lib和IrrLicht.lib(当然你需要在之前设置好VS2005的全局目录,保证这里IrrLicht.lib和IrrLicht_d.lib文件可以被找到):

然后根据IrrLicht的例子和文档,就可以在绘制控件的时候加入相关的代码,把3D图像绘制到MFC控件之中。在IrrLicht目录/Doc下面有引擎的文档,文档的第一页就有一个最短小的例子(很感叹IrrLicht的设计者,接口非常友好,而且跨平台)。

例子中的代码可以参考,但是无法用,因为这是在MFC的框架之中。MFC是消息驱动的,而一般的3D游戏都需要不断循环来推动图像的绘制。这就需要自己去解决这个绘制循环的问题。我这里参考了网上的一些方法,建立了一个死循环的线程,由这个线程来推动绘制。 在我的工程中,我创建了一个叫做GameFrame的类,用来做游戏逻辑层和外部的结合层,这样游戏逻辑就无需知道自己运行在什么环境中了。游戏逻辑层的初始化和主循环的驱动,由GameFrame类的提供。

GameFrame类的结构,请看头文件:

Init和Update这两个接口是最基本的,里面的是游戏逻辑代码。外部通过调用setDc来设置DC和窗口句柄,在setDc中触发Init函数。并且,外部通过createUpdateThread来启动绘制循环,循环调用Update,驱动游戏逻辑。

制作测试用html页面 我这里暂时没有考虑兼容性问题,只是给出了一个简单的例子。(这部分内容足够我写一篇文章了,呵呵)

这个标签,里面关键的是定义了classid,这个id的具体内容,是你的控件的全局唯一ID,VS2005已经帮你自动生成好了,在项目名Ctrl.CPP这个文件的“初始化类工厂和 guid”下面。

可以看到主要是用了

如果你的插件注册好了,那么打开IE浏览器,就可以看到你所绘制的东西。

上一篇:安全员培训复习重点下一篇:沙漠之行感悟