在起源 1 的Hammer 关卡编辑器中,创建笔刷实体的标准流程非常直观,整个过程只需4 个核心步骤。
第一步:画出一个基础 3D 笔刷
- 选择积木工具(Block Tool):
- 点击左侧工具栏上的白色方块图标,或者直接按快捷键
Shift + B。
- 点击左侧工具栏上的白色方块图标,或者直接按快捷键
- 在 2D 视口中拉拽形状:
- 在右上方的Top (x/y) 俯视图中,按住鼠标左键拖拽出一个矩形;
- 在右下方的Front/Side 视图中调整它的上下高度和厚度。
- 选择材质贴图(Texture):
- 在右侧工具栏的 Texture 区域点击Browse(浏览):
- 如果做可见的门、箱子、按钮:选择木头、金属或塑料等常规贴图(如
wood/...、metal/...); - 如果做隐形梯子:搜索并双击选择
tools/toolsinvisibleladder,,再Ctrl + T转为func_ladder。 - 如果做隐形触发器:搜索并双击选择
tools/toolstrigger,再Ctrl + T转为trigger_multiple。
- 如果做可见的门、箱子、按钮:选择木头、金属或塑料等常规贴图(如
- 在右侧工具栏的 Texture 区域点击Browse(浏览):
- 生成实体笔刷:
- 形状和贴图选好后,直接按键盘上的
Enter(回车键)。 - 此时在左上角的 3D 视口中,你就得到了一块普通的 3D 积木(此时它还是没有任何功能的 World Brush)。
- 形状和贴图选好后,直接按键盘上的
第二步:将笔刷绑定为实体(最核心的一步:Ctrl + T)
- 切换到选择工具:
- 按快捷键
Shift + S(或点击左侧最上方的红色箭头图标)。
- 按快捷键
- 选中刚才画出的笔刷:
- 在 3D 视口中单击它(选中的笔刷边缘会高亮显示为红框)。
- 绑定实体(Tie to Entity):
- 按下键盘快捷键:
Ctrl + T
(或者鼠标右键点击笔刷 ➔ 选择Tie to Entity)。
- 按下键盘快捷键:
第三步:选择实体类型(Class)
按下Ctrl + T后,屏幕上会立刻弹出一个Object Properties(对象属性)窗口:
- 窗口最顶部的Class(类型)下拉菜单中,默认通常会显示为
func_detail。 - 点击下拉框(或者直接在输入框里打字搜索),选中你需要的功能:
- 想做平移滑动门 ➔ 选择
func_door - 想做旋转铰链门 ➔ 选择
func_door_rotating - 想做爬梯 ➔ 选择
func_ladder - 想做打得碎的木箱/玻璃 ➔ 选择
func_breakable - 想做区域感应触发器 ➔ 选择
trigger_multiple或trigger_once - 想做按钮 ➔ 选择
func_button
- 想做平移滑动门 ➔ 选择
- 选定后,点击右下角的
Apply(应用)按钮。
第四步:配置属性与交互行为(Properties & Flags)
在弹出的属性面板中,切换顶部标签页完成细节配置:
Class Info标签页(数值设置):- 例如
func_door:设置 Move Direction(开门朝向)、Speed(移动速度)、Delay Before Reset(关门倒计时)。 - 例如
func_breakable:设置 Strength(血量,多少枪能打爆)、Material type(碎裂材质,如 Wood 木头、Glass 玻璃)。
- 例如
Flags标签页(标志位勾选):- 勾选具体的触发方式,例如勾选
Use Opens(按 E 键交互才开门)或Touch Opens(走上去触碰就开门)。
- 勾选具体的触发方式,例如勾选
- 配置完成后直接关闭窗口(设置会自动保存)。
必备快捷键与实用技巧
| 需求 / 场景 | 操作方法 |
|---|---|
| 想重新打开属性面板修改参数? | 选中实体,按快捷键Alt + Enter(或右键 ➔Properties)。 |
| 后悔了,想撤销实体变回普通墙壁? | 选中实体,按快捷键Ctrl + Shift + W(或右键 ➔Move to World),立刻解除绑定。 |
| 想把多个零件合并成一个门/箱子? | 按住Ctrl键多选多个笔刷(例如门板 + 门框 + 锁扣),一起按Ctrl + T,它们就会合成为同一个复合实体,整体移动或同时破碎。 |
| 快速在 3D 视口穿梭查看 | 按快捷键Z进入飞行浏览模式(用 WASD + 鼠标转动视角,再按 Z 退出)。 |
为什么笔刷不是entity tool?
很多初学者打开 Hammer,看到左侧工具栏有一个专门的“Entity Tool”(实体工具,快捷键Shift + E,图标像一个绿色的小国际象棋兵/小人),第一反应都是:“既然我要做实体,为什么不用 Entity Tool,而是非要先画个方块再按Ctrl + T?”
答案在于:起源引擎把“实体”严格划分成了两大家族:点实体(Point Entity)和 笔刷实体(Brush Entity)。
一、 Entity Tool(Shift + E)造的是什么?——“点实体(Point Entity)”
用 Entity Tool 在地图里点击一下,你会发现它生成的只是一个没有体积的“空间坐标点”(X, Y, Z)。
1. 为什么叫“点”?
因为它的大小、长宽高在地图里是不需要你现场画的:
- 光源(
light):你只需要告诉引擎“在天花板这个点(坐标)有一盏灯,照亮周围”,你不需要画出光线的体积。 - 出生点(
info_player_start):你只需要告诉引擎“玩家开局站在这个坐标点”,玩家的模型尺寸由代码固定好了。 - 现成 3D 模型(
prop_static/prop_physics):模型的长宽高在 Blender 里早就做好了打包在.mdl文件里,你用 Entity Tool 只是在地图里选一个坐标把模型摆在那儿。 - 逻辑大脑(
logic_relay/ambient_generic音效):纯逻辑计数器或背景音乐播放点,在游戏里完全隐形,只需要随便找个地方占个点。
⚠️ 如果你用 Entity Tool 去找
func_door或func_ladder,你会发现下拉列表里根本搜不到它们!
二、 为什么func_door和func_ladder必须用笔刷做?——“笔刷实体(Brush Entity)”
因为这类实体的尺寸、形状和体积不是固定的,引擎无法猜出来,必须由你亲手画出来!
场景 1:如果门(func_door)是个点……
- 引擎就会崩溃:“你用 Entity Tool 点了一下说这里有一扇门,但这扇门到底有多宽?多高?多厚?是 2 米高的木门,还是 10 米宽的机库大铁闸门?玩家走到哪才会被门挡住碰撞?”
- 所以你必须用笔刷(Block Tool)在网格里画出具体的长宽高,贴上门材质,然后按
Ctrl + T告诉引擎:“把这个特定尺寸的方块当成门,沿箭头平移!”
场景 2:如果梯子(func_ladder)是个点……
- 引擎无法处理:“你放了一个点梯子,玩家到底在哪个区域算接触梯子?高度能爬 5 米还是 50 米?”
- 所以你必须亲手画一个薄长方体,贴在墙体模型正面,告诉引擎:“只有当玩家走进这个长方体盒子的空间体积内,才进入攀爬状态。”
场景 3:如果区域触发器(trigger_multiple)是个点……
- 如果用 Entity Tool,它只是一个点,玩家踩不到这个点就无法触发。
- 只有画出一个覆盖整条走廊的隐形笔刷盒子(宽 300、长 500、高 150),才能确保“任何人只要走过这段走廊,就必定踏入这个判定区域并触发警报”。
三、 一目了然对比表
| 维度 | Entity Tool (Shift + E) | Block Tool (Shift + B) +Ctrl + T |
|---|---|---|
| 所属家族 | 点实体(Point Entities) | 笔刷实体(Brush Entities) |
| 典型代表 | info_player_start(出生点)light(光源)prop_static(摆放外部 3D 模型)ambient_generic(环境音效点) | func_door(滑门)func_door_rotating(旋转门)func_ladder(梯子区域)func_breakable(可打碎玻璃/木箱)trigger_*(隐形触发空间) |
| 核心本质 | 只是一个三维锚点坐标 (X,Y,Z)(X, Y, Z)(X,Y,Z) | 必须由你亲手定义长、宽、高和立体空间边界 |
| 外观来源 | 要么隐形,要么外挂引用外部.mdl模型 | 直接由你在 Hammer 里赋予贴图材质的几何体 |
| 生活比喻 | 图纸上的标记针(“在这里装个灯泡”、“在这里放把椅子”) | 施工现场浇筑的定制构件(“用水泥浇一扇防空洞大闸门”、“搭一个定制尺寸的逃生通道”) |
记忆诀窍
- “只要这个东西在游戏里有自定义的‘体积大小、长宽高’(比如门、梯子、伤害区域、可打碎的箱子),就必须先画笔刷,再按
Ctrl + T变成笔刷实体。” - “如果这个东西只是一个固定坐标、或者直接摆一个现成的 3D 道具模型(.mdl),就直接用 Entity Tool(
Shift + E)点在地上。”
用门举例:
Entity Tool里面也包含门,用 Entity Tool 放置的门不仅完全能控制,而且能做出非常逼真高级的交互!你可能在 Hammer 的 Entity Tool 列表里见过一个名字叫prop_door_rotating的东西。 它就是一个货真价实的、用 Entity Tool 放出来的门,而且能开门、能关门、能上锁、能按 E 互动、能被子弹打穿、甚至能被手雷把整扇门板直接炸飞掀翻!
那为什么引擎里同时存在“笔刷门”和“模型门”?
既然 Entity Tool 也能做门,为什么还要有按Ctrl + T的笔刷门?它们的根本区别在于:“现场搭积木” vs “买现成家具”。
1. Entity Tool 里的门:prop_door_rotating(现成 3D 模型门)
- 怎么生成的:
- 用 Entity Tool 在地面上点一下,输入
prop_door_rotating。 - 在属性里引用一个外部现成的 3D 模型文件(例如 Valve 官方做好的
models/props_c17/door01_left.mdl)。
- 用 Entity Tool 在地面上点一下,输入
- 它的强大优势:
- 颜值极高:有立体的金属门把手、精致的锁孔、甚至门把手被拧动下压的微动画。
- 物理特性真实:玩家冲刺撞上去能把门撞开;在门后丢一颗手雷,门轴会被炸断,整扇门直接变成刚体飞出去。
- 它的缺点(不可调整尺寸):
- 它的长、宽、高是在 Blender 建模时就固定死的。
- 如果你的关卡需要一个 10 米宽的巨大机库闸门,或者一个狭窄通风管道的小铁盖,Entity Tool 里的模型门就无能为力了,因为它不能在地图里随意拉伸变形。
2.Ctrl + T里的门:func_door/func_door_rotating(自定义笔刷门)
- 怎么生成的:
- 你自己用笔刷在网格里拉出一个方块,长宽高随你定,贴上贴图,按
Ctrl + T。
- 你自己用笔刷在网格里拉出一个方块,长宽高随你定,贴上贴图,按
- 它的强大优势:
- 尺寸完全自由:你可以做 1 米高的矮门,也可以做 50 米高的生化实验室密封闸门。
- 滑动门必备:比如电梯门、自动感应推拉门、卷帘门、地铁门、下沉式闸门。Valve 官方没有提供全套通用的滑动模型门,所有这些直线平移的门,全都是用
func_door笔刷拉出来的!
- 它的缺点:
- 外观通常是棱角分明的几何方块,门把手一般只是画在贴图上的平面的图案,没有精致的立体细节。
两类门的控制能力对比
这两类门在逻辑控制(Inputs / Outputs)上是完全平起平坐的,没有任何控制上的限制:
| 控制功能 | 笔刷门(func_door) | 模型门(prop_door_rotating) |
|---|---|---|
开门指令(Open) | ✅ 完全支持 | ✅ 完全支持 |
关门指令(Close) | ✅ 完全支持 | ✅ 完全支持 |
反转状态(Toggle) | ✅ 完全支持 | ✅ 完全支持 |
上锁与解锁(Lock / Unlock) | ✅ 支持(锁住时按 E 播放卡锁声) | ✅ 支持(锁住时拧不动门把手) |
| 支持按 E 键手动推开 | ✅ 支持 | ✅ 支持 |
| 直线平移滑动(如电梯门、卷帘门) | ✅天生强项 | ❌ 很难做(只擅长旋转门) |
| 任意自定义超大/超怪异尺寸 | ✅想画多大就画多大 | ❌ 尺寸固定受限于 .mdl |
| 手雷爆炸把门炸碎/掀飞 | ❌ 只能直接消失(Break) | ✅物理断轴飞出 |
实战选择指南:什么时候用哪种?
在制作你的 FPS 地图时,记住这个法则:
- 做普通的室内房门、木门、办公室门:
- ➔ 果断用 Entity Tool 放置
prop_door_rotating。模型好看,带立体把手,自带撞门开合物理,体验最好。
- ➔ 果断用 Entity Tool 放置
- 做电梯滑动门、仓库升降卷帘门、科幻气密平移门、金库厚重大铁门:
- ➔ 果断用 Block Tool +
Ctrl + T制作func_door。因为这些门需要严格贴合你设计的走廊宽度和轨道方向,只有笔刷门能随心所欲定制尺寸!
- ➔ 果断用 Block Tool +
自定义笔刷门的外观是门嘛?
它原本只是一块光秃秃的“长方体厚板”,它长得像不像门,100% 取决于你给它贴了什么贴图,以及你用了什么拼装手法!
如果你给它贴砖墙材质,它在游戏里就是一堵**“会横着滑走的砖墙”;
但如果你掌握了起源引擎经典的 3 种制作工艺,它在游戏里看起来就会是极为专业、严丝合缝的大门**。
工艺一:最常用法 —— 贴上专用的“门材质”(自带立体视觉)
Valve 官方在起源引擎的材质库里,为你预置了成百上千张专门用来做门的高清贴图。
- 材质库里搜
door:- 在 Hammer 材质浏览器里搜索关键词
door、metaldoor、elevator或gate。 - 你会看到大量现成的门贴图:木门、银行金库门、防辐射重型气密门、生化卷帘门、地铁安全门。
- 在 Hammer 材质浏览器里搜索关键词
- 贴图自带立体光学假象:
- 这些官方贴图在绘制时,就已经画好了立体的金属拉丝光泽、磨损锈迹、警示黄黑斑马线、门缝阴影、甚至门把手的投影。
- 一键贴合(Fit):
- 笔刷画好后,按快捷键
Shift + A打开贴图对齐工具,点击一下Fit(贴合)。 - 整张门的图案就会刚好严丝合缝、不歪不扭地包裹住你的长方体。
- 在游戏里看起来:它就是一个标准的、平整的金属平移门或电梯门(你在《反恐精英》、《半条命2》里见到的 80% 的大铁门和卷帘门,其实都是这么做出来的)。
- 笔刷画好后,按快捷键
工艺二:进阶拼装 —— 像搭积木一样拼出立体结构
谁说门只能是一块扁平的长方体?你可以把多个笔刷拼在一起,合成为同一个门:
- 画主体门板:先拉一个 128 宽、200 高的扁平长方体;
- 画立体凸起构件:
- 在门的上半部分和下半部分,画两个微微凸起的横梁笔刷(增加厚重感);
- 在中间掏空一个小方块,塞进一个半透明的防弹玻璃笔刷(贴
glass/glasswindow001);
- 一键打包:
- 按住键盘
Ctrl键,把主体门板、横梁凸起、防弹玻璃全部选中; - 一起按下
Ctrl + T➔ 选择func_door。
- 按住键盘
- 在游戏里看起来:这扇门就拥有了真正的三维凹凸阴影和透明观察窗,再也不是一块死板的扁平木板,开门时所有零件会整体平移滑走!
工艺三:大师级欺骗法 —— 笔刷门 + 挂载立体 3D 把手/配件(Parenting)
如果你觉得笔刷上的门把手是贴图画出来的(平面的,侧看没有厚度),关卡设计师最常用的“障眼法”是:挂载实体道具(Parent)。
┌──────────────────────────────────────┐
│ func_door 笔刷主体 (负责滑动和物理阻挡)│
│ │
│ [ 立体金属把手模型 ] │ <── 用 prop_dynamic 放置真正的 3D 把手
│ (Parent 绑定在门上) │ 门移动时,把手跟着一起移动!
└──────────────────────────────────────┘
- 做法:
- 用笔刷做主体门板
func_door,在属性里给它起个名字(Name),比如叫my_heavy_door。 - 用 Entity Tool 放置一个真正的 3D 金属把手模型(
prop_dynamic,如handle01.mdl)贴在门上。 - 在把手模型的属性里,找到
Parent(父级实体),填入my_heavy_door。
- 用笔刷做主体门板
- 效果:
- 主体门依然享有笔刷门“随心所欲定制超大尺寸”的优势;
- 但视觉上,玩家走近看能看到真实的金属立体反光门把手;
- 门开合滑动时,把手死死吸附在门上同步移动,质感直接媲美专业 3D 建模软件做出来的大作级机械门!
总结
- 生来是什么:自定义笔刷门生来就是一截空白的几何体积。
- 最终是什么:只要选对了自带把手和质感的
door贴图(按 Fit 贴齐),或者拼上立体框架与配件,在玩家眼里,它就是一扇完全真实、严丝合缝的战术射击游戏大门!
工艺三有什么意义,都挂载实体道具了,为什么还要这么折腾?
你问到了游戏工业级关卡设计(Level Design)最核心的痛点!
你心里一定会想:“既然我都把 3D 模型调出来了,为什么不干脆让美术在 Blender 里建一个一整扇带把手的完整大门模型,直接用模型门不就完了吗?为什么还要用笔刷做门身、再挂个模型把手,这不是脱裤子放屁吗?”
之所以在《半条命》、《反恐精英》、《求生之路》以及各大射击游戏中,关卡设计师大量采用这种“拼装折腾法”,背后有4 个极其残酷的工程现实和开发成本考量:
原因一:关卡尺寸千变万化,不可能为每个门洞去跪求美术重做模型
这是关卡策划和 3D 美术之间最经典的矛盾:
- 如果做一整扇 3D 模型门:
- 美术做出来的模型,长、宽、高是死板固定的(比如宽 128、高 200)。
- 但关卡策划在搭建地图时:
- A 点仓库大门需要宽 300、高 250(因为要容纳两辆叉车并排开过去);
- B 点下水道暗门需要宽 80、高 140(必须设计成只能蹲着过去的小门);
- C 点电梯门需要宽 160、高 220。
- 如果全部用整扇模型门,策划就必须让美术建3 个完全不同的模型、展 3 次 UV、写 3 个 QC 文件、编译 3 次 MDL,耗时耗力。
- 但如果用“笔刷门 + 挂载小配件”:
- 门的主体是笔刷:策划在 Hammer 里拉鼠标,10秒钟就能拉出 300 宽、80 宽、160 宽的任意门板。
- 把手、电子密码锁、警报红灯是通用的!美术只要做一个精致的小把手模型,策划可以把它挂在全地图所有不同尺寸的门上!
原因二:引擎里根本没有原生的“高精度模型滑动门”系统
Valve 官方为 Entity Tool 里的模型门,只专门写了一个系统:prop_door_rotating(旋转铰链门)。 官方压根没有提供通用的prop_door_sliding(模型滑动门实体)!
- 如果你硬要用纯 3D 模型做一扇向上升起的卷帘门或者横向平移的电梯门:
- 外部模型(
prop_dynamic)本身是不带“沿直线平移、按 E 开启、被挡住自动弹回”的代码逻辑的。 - 你必须在 Blender 里面给模型骨骼做关键帧位移动画,或者在地图里用复杂的物理绳索/滑轨约束去拉动它,极容易产生动画与实际碰撞不同步的恶性 Bug。
- 外部模型(
- 而
func_door是引擎自带的“平移之王”:- 只需要在属性里填一个方向(Up / Left),它自己就会精准平移;
- 被玩家身体挡住时,自带原生反弹(防夹死)逻辑。
- 所以:用笔刷门负责最稳定的“滑动和碰撞逻辑”,把模型挂在它身上白嫖这个平移动作,是最省力、最稳定的解法。
原因三:防止恶性穿模与物理卡死(Collision 稳定性)
在射击游戏中,门的碰撞判定是**最容易引发穿模 Bug(把玩家挤出地图外掉入虚空)**的地方:
- 复杂的 3D 模型碰撞网格(Physmesh):
- 模型的表面有凹凸、斜角和多边形顶点。当一个复杂的 3D 大门在移动平移时,由于多边形接触面复杂,玩家走过去非常容易被卡进门的模型缝隙里,或者被门推着直接穿墙挤死,导致服务器掉帧或崩溃。
- 笔刷门(
func_door):- 笔刷是引擎底层最喜欢的标准轴对齐立体方块(AABB 包围盒),计算速度快如闪电,碰撞判定极其干净严密,绝对不会出现玩家卡进门缝里的穿模现象。
原因四:模块化资产复用(Kitbashing 工业法则)
现代 3A 游戏工业推崇一种叫做Kitbash(零件拼装化)的开发模式:
想象一下,你作为一个独立开发者或小团队:
- 你不需要在硬盘里存几百把不同形状的完整大门文件;
- 你的资产库里只需要常备:
- 几张高精度金属/木质贴图;
- 1 个金属握把模型;
- 1 个刷卡密码键盘模型;
- 1 个齿轮指示灯模型。
- 在关卡制作时,你可以在 5 分钟内用笔刷拼出防空洞门、金库门、医院气密门、潜艇隔离门,然后把那几个通用小模型像贴纸一样挂上去。
总结
这种折腾不是多余的,而是用极低的制作成本,同时拿下两全其美的结果:
- 拿下了笔刷门专属的特权:尺寸随意捏、防穿模极其稳定、原生支持各种直线平移和卷帘升降逻辑;
- 拿下了模型专属的特权:近距离观察时,能看到真实凹凸反光的 3D 立体把手和密码锁。