使用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)这个游戏制作的. ...
随机推荐
- Java [Leetcode 165]Compare Version Numbers
题目描述: Compare two version numbers version1 and version2.If version1 > version2 return 1, if versi ...
- 【jQuery】鼠标接触按钮后改变图片
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- delphi 编译的时候 把Warning去除的方法
delphi 编译的时候 把Warning去除的方法 在 添加 {$WARNINGS OFF}
- 【转】u盘不显示盘符
转自http://jingyan.baidu.com/article/f3ad7d0fd0793e09c3345b31.html 我的情况: 电脑只有一个c盘,插入u盘,u盘的盘符为d. 弹出u盘,但 ...
- C# 总结
转自原文 C# 总结 1.类型是隐式内部的.(类) 2.类型成员是隐式私有的.(方法) 3.常量定义:const 是隐式static的,必须在定义时设置初始值. 4.只读字段:readonly 可以在 ...
- 转载:C语言的谜题
转载:http://coolshell.cn/articles/945.html 这几天,本站推出了几篇关于C语言的很多文章如下所示: 语言的歧义 [酷壳链接] [CSDN链接] 谁说C语言很简单? ...
- android 官网处理图片 代码
/** * 获取压缩后的图片 (官网大图片加载对应代码) * * @param res * @param resId * @param reqWidth * 所需图片压缩尺寸最小宽度 * @param ...
- 提取数字、英文、中文、过滤重复字符等SQL函数(含判断字段是否有中文)
--SQL 判断字段值是否有中文 create function fun_getCN(@str nvarchar(4000)) returns nvarchar(4000) a ...
- 感知器Perceptron
Perceptron: 1.一种基于监督的线性分类器,其特点是:1)模型简单,具有很少的学习参数:2)具有可视性,一条直线即可划分:3)基于人工神经网络的原理. 其结构图为: 2.学习的关键技术: ...
- oc_转_NSInteger 和 NSNumber
Objective-C 支持的类型有两种:基本类型和类. 基本类型,如同 C 语言中的 int 类型一样,拿来就可以直接用.而类在使用时,必须先创建一个对象,再为对象分配空间,接着做初始化和赋值.类的 ...