类Quake FPS游戏教程

一步步教你使用觉醒3D

类Quake FPS游戏教程

帖子awakening3d » 2011年 1月 24日 19:06

这个教程有意作为一个入门引导,利用Awakening制作一个类Quake的第一人称射击游戏。
awakening3d
网站管理员
 
帖子: 141
注册: 2010年 10月 28日 17:39

I. 建模

帖子awakening3d » 2011年 1月 25日 00:41

我们使用Google Sketchup + 3dsMax。先在Sketchup里搭建主体,再导入3dsmax作修饰。好了,让我们启动Sketchup(教程里用的是Google Sketchup Pro 6.0),然后先选择菜单 Windows > Model Info,在弹出的对话框里找到关于Units的选项,设置如下:

图片

然后建立如下模型:

图片
(也可点这儿直接下载)

  在sketchup里建好模型就可以导出了,选择菜单 File > Export > 3D Model...,在弹出的对话框里,Export type 选 3DS (*.3ds),然后点Options...,设置如下:

图片

  点OK输出到 “arena.3ds” 文件。

  如果场景只是使用老的 lightmap 光照方法,那么在 Awakening 里就可以导入这个3ds文件直接用了。但在这个场景我们要用 dot3 bump 光照,那还要先导入 3dsmax 进行表面细分:

  首先,在 Awakening 安装目录下的 otherplugins 文件夹下找到相应的插件放到 3dsmax 的 plugins 目录下(教程使用 3dsmax8,相应的插件就是 max8triexp.dle 和 max8aniexp.dle,另外 max7 是和 max6 的插件通用的)。
  然后,启动 3dsmax,先选择菜单 Customize > Units Setup...,在弹出的对话框里,点 System Unit Setup,设置 1 Unit = 1.0 Centimeters 。再选择菜单 File > Import...,在弹出的对话框里,“文件类型”选择3D Studio Mesh,点“打开”,按如下方式导入模型:

图片

  导入后,选择所有mesh,加一个Subdivide修改器,结果如下:

图片

再加一个UVW Map修改器,使用Box Mapping方式给整个模型指定纹理坐标(没有指定纹理坐标导出的模型计算像素光照有问题)。

  好了,现在可以选择菜单 File > Export... ,然后以 winds3d tri file (*.tri) 类型导出到 Awakening 的自有模型格式文件 “arena.tri”。

  建模工作就完成了!
awakening3d
网站管理员
 
帖子: 141
注册: 2010年 10月 28日 17:39

II. 贴图

帖子awakening3d » 2011年 3月 9日 10:32

请参照贴图教程,把场景贴成如图所示(具体贴图文件可在安装目录的textures文件夹下找):

图片
awakening3d
网站管理员
 
帖子: 141
注册: 2010年 10月 28日 17:39

III.灯光

帖子awakening3d » 2011年 3月 9日 11:14

参照下图,在场景上方放置几盏灯,注意灯光的范围参数(Range)不要太小。先按F9计算普通光照,接着再做辐射度光照(可参见光照教程,在视区中按 Shift+T 可切换查看光照):

图片
awakening3d
网站管理员
 
帖子: 141
注册: 2010年 10月 28日 17:39

IV.材质

帖子awakening3d » 2011年 3月 9日 11:37

参照材质教程,给场景赋予材质。注意 D3D Effect 使用的是 parallax_mapping 下的 parallaxLM.fx ,并且纹理顺序是:decal map,normal map 和 light map。

图片

最后,执行菜单里的 Tools > Arrange Scene 命令,优化整理整个场景,这步是需要的,不然场景里的碰撞信息不完整。

这样,基本场景布置就完成了。可以点工具条上的 "!" 或按 F5 播放场景,在播放器中按 Shift + F 可以切换到游戏模式,走动看看。下一步,就要用 LUA 脚本编程实现具体游戏了。
awakening3d
网站管理员
 
帖子: 141
注册: 2010年 10月 28日 17:39

V: 脚本编程(1)

帖子awakening3d » 2011年 4月 16日 23:30

觉醒3D的编程主要使用Lua语言,这是一个高效简洁的脚本语言,非常适合游戏开发。针对每个场景,都有一个对应的User Script File ,文件名为scene file name + .usr。假设我们把上面编辑好的场景存为fpsdemo.sce,那么对应的 User Script File 就为 fpsdemo.sce.usr,这个脚本文件可在Awakening中编辑场景时通过菜单 View > Edit User Script File... 命令打开编辑。

在这个脚本文件中,并没有通常“入口”的概念。需要做初始化的代码只要放在这个文件的开头就可以了,场景加载时会执行这些代码。除了初始化工作,剩下的主要是响应一些消息,比如按键,鼠标,窗口大小改变,每帧更新等等,通过这些响应,我们就能实现游戏功能了。具体可参考Awakening 帮助中的 User Script File Reference .
awakening3d
网站管理员
 
帖子: 141
注册: 2010年 10月 28日 17:39

VI: 脚本编程(2)

帖子awakening3d » 2011年 4月 17日 00:01

首先,在最新版的 Awakening (当前为1.0 sp1) 安装文件夹下,在 scenes \ demos \ FPS Game 下有个 luas 文件夹,里面是一些针对 fps 游戏开发的通用脚本功能模块,我们把它拷过来和自己的场景文件放在一起,这样就可以调用了。

然后在自己的 User Script File 中,在最开头加入以下几行:

代码: 全选
require 'luas\\fpsgame_util'
require 'luas\\myplayer'
require 'luas\\smgun'
require 'luas\\rocketgun'
require 'luas\\monster'


这是声明要用到 luas 文件夹下的这些功能模块。

接着,创建一些基本对象,比如枪炮,玩家,怪兽等:

代码: 全选
local gunSMG = smgun.new() -- new 一把冲锋枪
local gunRocket = rocketgun.new() -- new 一把火箭炮

player = myplayer.new() -- new 一个player
player.pickGun(gunSMG) -- 让 player 捡起冲锋枪
player.pickGun(gunRocket) -- 让 player 捡起火箭炮
player.prevGun() -- 让 player 切换到前一把枪

local mon = monster.new() -- new 一只怪兽


接着,配置操作模式,音效等等:

代码: 全选
fpsgame_config.sounds[tex_metal] = '\\footsteps\\clank1.wav' -- 脚步金属声
fpsgame_config.sounds[tex_brick] = '\\footsteps\\step2.wav' -- 脚步砖墙声
fpsgame_config.sounds[tex_wood] = '\\footsteps\\wood1.wav' -- 脚步木板声
-- 注意这里 tex_metal, tex_brick, tex_wood 是相关 texture 对应的 Script Variable ,需要在场景编辑时定义好(在纹理浏览窗口选中纹理图片,然后点鼠标右键,在弹出的菜单中选 Define Script Variable... )。

EnableAccel(false) -- 关闭快捷键
SetInputStyle( ModifyStyle(GetInputStyle(),0,INPUT_STYLE_WSAD) ) -- 加上 WSAD 移动功能
GameMode(true) -- 开启游戏模式
awakening3d
网站管理员
 
帖子: 141
注册: 2010年 10月 28日 17:39


回到 教程

在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客

cron