使用Unity制作游戏关卡的教程(一)
转自: http://gamerboom.com/archives/74131
作者:Matthias Zarzecki
我正在制作《Looking For Group – The Fork Of Truth》的关卡。
在本系列中,我们将使用Unity制作游戏的环境。第一部分主要介绍基本场景——地形。这是其他场景元素的构建基础。(请点击此处阅读本文第二部分)
如果你已经看过我们的Kickstarter融资预告片,那么你应该看过这个场景了。
为了制作这些视频,我们其实制作了一个可玩的关卡。我们把它当作一个原型区域,用来测试战斗系统和游戏的世界观。我们将使用真正的Kickstarter视频,这样读者就可以预测到最终效果了。最终,这是要放进一个可玩的游戏中的(不过是比较短的游戏)。
关卡预览
角色从右下角的道路进入场景:

lower right(from gamasutra)
他们进入村庄,遭遇地精攻击:

goblin attack(from gamasutra)
再从农民(其实是一个地精扮的)处得到一个任务,追踪地精。他们被引入陷阱,在地精营地展开最后一战。

goblin camp(from gamasutra)
这个关卡的通关时间是10-20分钟,非常有趣。接下来我们来学习如何制作吧!
地形
整个关卡使用Unity Terrain来制作。这是一个制作自然场景的好办法。
首先打开Unity Terrain,即在菜单栏中选择”Terrain” -> “Create Terrain”。你会看到以下平面:

terrain_01(from gamaustra)
你可以使用不同的笔刷在这个平面上“画画”:

brushes and sizes(from gamasutra)
使用高度绘画工具(第一个模式),你可以画出高度差。简单地选择正确的模式,通过Unity viewport在平面上画出你的地形:

terrain_02(from gamasutra)
使用材质绘画工具,可以在地形上添加纹理。

apply textures(from gamasutra)
使用草地等地面材质,如下图所示:

terrain_03(from gamasutra)
添加其他材质制作岩石、沙地等你所需要的地面类型:

terrain_04(from gamasutra)
道路很容易做。简单地画出某个高度,然后赋上材质就做好了:

terrain_05(from gamaustra)
以下是我们在《The Fork of Truth》中使用的材质:

the fork of truth(from gamasutra)
使用这些简单的工具,你可以制作出复杂、逼真而有趣的地形。你可以看到右边的道路纹理,以及路面与水池形成的高度差。
Unity Terrain是强大的功能,提供多种选择和方式来制作游戏世界。你几乎可以用它制作出所有种类的景观。街道、河流、峡谷等——都能在简单的鼠标点击中完成。
垂直
但你得注意不要画蛇添足。你可以做出漂亮的地形,但丘陵地形可能成为你制作关卡的一大麻烦。
高度差使放置对象变成累人的杂事。可能到头来你得花上好几个小时调整场景中的对象的垂直位置,这样它们看起来才不至于浮在半空中或陷在地面上。
《The Fork of Truth》的地形基础是一个平面。上面仍然有丘陵和洼地,但这些纯粹是视觉上,你不可能接触到它们。在下图中,你可以看到有些非平面的区域。它们是不可进入的,因为有障碍物和“不可见的墙”。

hills_02(from gamasutra)
保持关卡地形为平面的另一个好处是,更容易进攻。当地形不平时,进攻和技能释放会更加困难。召唤出来的龙卷风可以水平移动或者沿着道路移动吗?可以爬上悬崖吗?如果角色站在小山坡上,可以向下释放火球攻击敌人或让火球飞过敌人头顶吗?如果角色和敌人之间有一堵小坡挡差点呢?
保持关卡地开平坦可以有效地避免这些问题。像《暗黑》、《火炬之光》和《魔法对抗》等游戏也大量使用平原场景。因为这么做确实有充分的理由。
注意,即使我们让可行走的区域保持平面,我们也要让某些地方不平坦,以造成深度差的效果。为了拓展游戏,我们打算在关卡中加入高度。高度差和悬崖使关卡设计更加有趣,所以我们不想错过。

depth(from gamasutra)
水体
在《The Fork Of Truth》中,角色目前还无法与水体互动。如果有什么东西掉进水里的话,比如在攻击时地精被打进水里,那么它就会立即被消灭。
关卡中的河流是地形上的洼地,低于平地30个单位。从下图中你可以看到河流的“峡谷”,里面还有一些装饰性的物品。只要添加水体就成为河流了。

lfg_water(from gamasutra)
水面有几种不同的选择。最简单的一种是用蓝色透明的平面方形做成的:

lfg_water(from gamasutra)
Unity有若干水体着色器。以下是基本的一种。它有水波动画和简单的反射,但不透明:

lfg_water(from gamasutra)
以下这一种更高级一些(现在颜色有一点不正常)——有上图中的水波动画,也是透明的。

lfg_water(from gamasutra)
另一种堪称完美(游戏邦注:在Unity Pro中叫作“Water4”)。它是透明的,能形成倒影,有水波动画,非常适合这款游戏的卡通风格。它在边界处还有一个有趣的特点。即使它有诸多优点,但并不像其他高级水体类型那么需要高帧率。

lfg_water(from gamasutra)
总结
在Unity中,关卡构建的过程始于总体的地形布局。以下我总结成三点:
1、使用Unity Terrain快速雕刻地形和贴材质。
2、保持可行走道路平坦,使关卡设计更容易。
3、Unity有若干种水体着色器,我们使用的是Pro着色器的“Water4”。
运行除了有地面和水体,其他基本空白的关卡仍然能让人感到满足。如果是,那么你就已经为接下来的关卡制作做好准备了。
预告:本文接下来一部分我们将介绍如何在关卡中放置对象,以及用树、灌木、栅栏等小物品装饰场景。
使用Unity制作游戏关卡的教程(一)的更多相关文章
- 使用Unity制作游戏关卡的教程(三)
转自:http://gamerboom.com/archives/75593 作者:Matthias Zarzecki 本文是“使用Unity制作<The Fork Of Truth>的关 ...
- 使用Unity制作游戏关卡的教程(二)
转自:http://gamerboom.com/archives/75554 作者:by Matthias Zarzecki 本文是“使用Unity制作<The Fork Of Truth> ...
- Unity制作游戏中的场景
Unity制作游戏中的场景 1.2.3 场景 在Unity中,场景(Scene)就是游戏开发者制作游戏时,所使用的游戏场景.它是一个三维空间,对应的三维坐标轴分别是X轴.Y轴和Z轴本文选自Unity ...
- [Unity]制作游戏中名字板的过程记录
先大概说一下需求: 1 每个模型上都要有名字板:人.怪.npc等等. 2 名字板上会显示:名字(文字).血条(图片)等 3 因为是透视相机,名字板离得太近会变得超大,且主角移动,名字板的位置相对于相机 ...
- 《Unity 3D游戏客户端基础框架》概述
框架概述: 做了那么久的业务开发,也做了一年多的核心战斗开发,最近想着自己倒腾一套游戏框架,当然暂不涉及核心玩法类型和战斗框架,核心战斗的设计要根据具体的游戏类型而定制,这里只是一些通用的基础系统的框 ...
- 自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析
自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...
- 使用CocosSharp制作一个游戏 - CocosSharp中文教程
注:本教程翻译自官方<Walkthrough - Building a game with CocosSharp>,官方教程有很多地方说的不够详细,或者代码不全,导致无法继续,本人在看了G ...
- Unity小游戏制作 - 暗影随行
用Unity制作小游戏 - 暗影惊吓 最近玩了一个小游戏,叫做暗影惊吓,虽然是一个十分简单的小游戏,但是感觉还是十分有趣的.这里就用Unity来实现一个类似的游戏. 项目源码:DarkFollow 主 ...
- 自制Unity小游戏TankHero-2D(2)制作敌方坦克
自制Unity小游戏TankHero-2D(2)制作敌方坦克 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的. ...
随机推荐
- apache开源项目 --Struts
struts简介 Struts是Apache软件基金会(ASF)赞助的一个开源项目.它最初是jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目.它通过采用JavaServlet/ ...
- 【JS】<a>标签调用js中函数的几种方法
我们常用的在a标签中有点击事件: a href="javascript:js_method();" 这是我们平台上常用的方法,但是这种方法在传递this等参数的时候很容易出问题,而 ...
- MySQL索引与优化策略
1. MySQL索引实现 在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,下面主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式. MyISAM索引实现 M ...
- 【转】STL空间配置器
STL空间配置器(allocator)在所有容器内部默默工作,负责空间的配置和回收.STL标准为空间配置器定义了标准接口(可见<STL源码剖析>P43).而具体实现细节则由各编译器实现版本 ...
- POJ 2362 Square
题意:给n个木棍,问能不能正好拼成一个正方形. 解法:POJ1011的简单版……不需要太多剪枝……随便剪一剪就好了……但是各种写屎来着QAQ 代码: #include<stdio.h> # ...
- HDU 5407 CRB and Candies
题意:给一个正整数k,求lcm((k, 0), (k, 1), ..., (k, k)) 解法:在oeis上查了这个序列,得知答案即为lcm(1, 2, ..., k + 1) / (k + 1),而 ...
- Corn Fields(POJ 3254状压dp)
题意: n*m网格1能放0不能放 放的格子不能相邻 求一共多少种可放的方案. 分析: dp[i][j]第i行可行状态j的的最大方案数,枚举当前行和前一行的所有状态转移就行了(不放牛也算一种情况) #i ...
- HDU-3280 Equal Sum Partitions
http://acm.hdu.edu.cn/showproblem.php?pid=3280 用了简单的枚举. Equal Sum Partitions Time Limit: 2000/1000 M ...
- 使用 CreateInstallMedia 创建 苹果系统安装U盘
一般来说,从app store上面 下载下来的image位置,都是在 /Applications 下面 使用命令创建安装U盘,(备份一下命令,太长,记不住) sudo /Applications/In ...
- Codeforces 372
A (被装的袋鼠不可以装的袋鼠)贪心,排序,从n/2分成两部分. B 好一道前缀和的题目. C 标准算法不难想,m^2的算法见http://codeforces.com/blog/entry/9907 ...