Zh/Working with instances: Difference between revisions
< Zh
Jump to navigation
Jump to search
(Created page with "{{LanguageBar|Working with instances|使用实例}} {{portal2}} 在制作《传送门2》地图时使用实例(Instances)能大幅提升效率——从谜题原型设计到最终发布,整个过程如虎添翼!官方创作工具提供的标准实例几乎涵盖地图制作所有元素:从基础物件如地板按钮,到复杂机关如方块生成器,甚至非游戏元素如观察室。 == 实例是什么? == 实例是地图构建时引用的VMF文件,...") |
(→从零创建实例) |
||
(3 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{{LanguageBar|Working with instances|使用实例}} | {{LanguageBar|Working with instances|title=使用实例}} | ||
{{portal2}} 在制作《传送门2》地图时使用实例(Instances)能大幅提升效率——从谜题原型设计到最终发布,整个过程如虎添翼!官方创作工具提供的标准实例几乎涵盖地图制作所有元素:从基础物件如地板按钮,到复杂机关如方块生成器,甚至非游戏元素如观察室。 | {{portal2}} 在制作《传送门2》地图时使用实例(Instances)能大幅提升效率——从谜题原型设计到最终发布,整个过程如虎添翼!官方创作工具提供的标准实例几乎涵盖地图制作所有元素:从基础物件如地板按钮,到复杂机关如方块生成器,甚至非游戏元素如观察室。 | ||
Line 8: | Line 8: | ||
== 何时该用实例? == | == 何时该用实例? == | ||
实例的核心优势在于: | 实例的核心优势在于:'''一次修改,全局生效'''。若调整了按钮或门的造型逻辑,无需逐个修改地图中的副本(告别手动复制粘贴!)。尤其适合以下场景: | ||
* 重复的游戏机关(按钮/门/传送装置) | * 重复的游戏机关(按钮/门/传送装置) | ||
* 复杂几何结构 | * 复杂几何结构 | ||
Line 16: | Line 16: | ||
== 从零创建实例 == | == 从零创建实例 == | ||
* | *原点规则:地图原点(0,0,0)将作为实例的基准点。例如将按钮底部置于原点,可确保实例放置时与地板完美贴合。 | ||
> * | *'''参数化设计'''<br> | ||
通过{{L|func_instance_parms}}实体实现动态配置: | |||
1. 在实例中声明带`$`前缀的变量(如`$box_type`) | |||
2. 关联到实例内实体的对应属性(如方块的"Cube Type"值) | |||
3. 主地图通过func_instance的"Replace"字段实时修改参数 | |||
*'''I/O交互桥梁'''<br> | |||
若需与主地图交互,添加命名为"proxy"的{{L|func_instance_io_proxy}}实体: | |||
1. 为每个需接收的输入创建对应输出:"OnProxyRelay" | |||
2. 主地图通过"instance:<实体>;<指令>"格式通信 | |||
> 命名技巧:实例内需直连的实体建议以"@"开头命名(如"@elevator_core"),主地图可直接对其发送指令——Valve电梯系统大量采用此方案。 | |||
=== func_instance_parms与实体命名的关键细节 === | === func_instance_parms与实体命名的关键细节 === | ||
当实例实体名称被参数化时,主地图的I/O必须指向 | 当实例实体名称被参数化时,主地图的I/O必须指向''最终合并名称''(VBSP编译时自动生成)。命名规则如下(假设采用"前缀模式"): | ||
> (func_instance的Fix Up Name值)-(实例实体原名) | > (func_instance的Fix Up Name值)-(实例实体原名) | ||
例如:若实例内实体名为 | 例如:若实例内实体名为"button_trigger",主地图func_instance的Fix Up Name设为"Lobby",则主地图中该实体名为"Lobby-button_trigger"。 | ||
== 技术深潜 == | == 技术深潜 == | ||
{{Note|Hammer编辑器需保存地图后实例才会显示}} | {{Note|Hammer编辑器需保存地图后实例才会显示}} | ||
'''核心特性''' | |||
* | * 解包实例不受贴图锁定影响 | ||
* 使用{{code|func_instance_origin}}的实例选择框可能显示异常 | * 使用{{code|func_instance_origin}}的实例选择框可能显示异常 | ||
* {{code|replace}}参数顺序无关 | * {{code|replace}}参数顺序无关 | ||
Line 48: | Line 50: | ||
* 嵌套实例需"代理桥接"才能在I/O自动补全中显示 | * 嵌套实例需"代理桥接"才能在I/O自动补全中显示 | ||
'''组件解析''' | |||
*func_instance_parms | |||
通过 | 通过<code>parm<num></code>模式添加额外参数(对应<code>replace<num></code>字段),无描述文本但顺序自由 | ||
*func_instance_io_proxy | |||
编译/反编译可能将{{ | 编译/反编译可能将{{L|OnProxyRelay}}输出添加数字后缀(如OnProxyRelay1) | ||
'''设计哲学''' | |||
<br>实例本质是封装预制件(类似Unity的Prefab/虚幻引擎的Package),具有三大优势: | |||
*统一管理:修改实例源文件,所有引用自动更新 | |||
*模块化开发:如装饰物集只需创建一次,全图复用 | |||
*跨工程协作:预设库共享(通过实例化→解包流程) | |||
> | > 性能提示:复杂实例编辑时频繁点击"Edit Instance"前务必保存地图! | ||
=== 解包妙用 === | === 解包妙用 === |
Latest revision as of 05:19, 26 June 2025
在制作《传送门2》地图时使用实例(Instances)能大幅提升效率——从谜题原型设计到最终发布,整个过程如虎添翼!官方创作工具提供的标准实例几乎涵盖地图制作所有元素:从基础物件如地板按钮,到复杂机关如方块生成器,甚至非游戏元素如观察室。
实例是什么?
实例是地图构建时引用的VMF文件,编译时会与主地图合并。一个实例VMF可以简单到仅含单个刷子,也可复杂到包含完整谜题机关及其逻辑实体与输入/输出触发器。
何时该用实例?
实例的核心优势在于:一次修改,全局生效。若调整了按钮或门的造型逻辑,无需逐个修改地图中的副本(告别手动复制粘贴!)。尤其适合以下场景:
- 重复的游戏机关(按钮/门/传送装置)
- 复杂几何结构
- 精密的实体或I/O系统(如地图过渡)
- 高频复用的物件组合
从零创建实例
- 原点规则:地图原点(0,0,0)将作为实例的基准点。例如将按钮底部置于原点,可确保实例放置时与地板完美贴合。
- 参数化设计
通过func_instance_parms 实体实现动态配置: 1. 在实例中声明带`$`前缀的变量(如`$box_type`) 2. 关联到实例内实体的对应属性(如方块的"Cube Type"值) 3. 主地图通过func_instance的"Replace"字段实时修改参数
- I/O交互桥梁
若需与主地图交互,添加命名为"proxy"的func_instance_io_proxy 实体: 1. 为每个需接收的输入创建对应输出:"OnProxyRelay" 2. 主地图通过"instance:<实体>;<指令>"格式通信
> 命名技巧:实例内需直连的实体建议以"@"开头命名(如"@elevator_core"),主地图可直接对其发送指令——Valve电梯系统大量采用此方案。
func_instance_parms与实体命名的关键细节
当实例实体名称被参数化时,主地图的I/O必须指向最终合并名称(VBSP编译时自动生成)。命名规则如下(假设采用"前缀模式"): > (func_instance的Fix Up Name值)-(实例实体原名)
例如:若实例内实体名为"button_trigger",主地图func_instance的Fix Up Name设为"Lobby",则主地图中该实体名为"Lobby-button_trigger"。
技术深潜

核心特性
- 解包实例不受贴图锁定影响
- 使用func_instance_origin的实例选择框可能显示异常
- replace参数顺序无关
- 添加$varname会自动创建参数槽
- 嵌套实例需"代理桥接"才能在I/O自动补全中显示
组件解析
- func_instance_parms
通过parm<num>
模式添加额外参数(对应replace<num>
字段),无描述文本但顺序自由
- func_instance_io_proxy
编译/反编译可能将OnProxyRelay 输出添加数字后缀(如OnProxyRelay1)
设计哲学
实例本质是封装预制件(类似Unity的Prefab/虚幻引擎的Package),具有三大优势:
- 统一管理:修改实例源文件,所有引用自动更新
- 模块化开发:如装饰物集只需创建一次,全图复用
- 跨工程协作:预设库共享(通过实例化→解包流程)
> 性能提示:复杂实例编辑时频繁点击"Edit Instance"前务必保存地图!
解包妙用
通过顶部菜单"Instancing→Collapse Instance"可解包实例:
- 将预设转化为普通实体(脱离实例关联)
- 适用场景:导入基础结构→解包→自定义贴图
- 避免污染原始实例库