道具类型概述
在Source里,"prop(道具)"这个词通常是"代码仿真模型实体"的代名词。有各种道具的实体类,每一个都代表着具有特定功能的模型。选择它们中的每一个都有具体的原因,并且不同的人对功能和性能方面有着不同的需求。
Contents
道具类型
下表列出了关卡设计者能放置的主要道具类型,以及它们的总体特征:
模型实体 | 属性 |
---|---|
prop_detail |
带细节的几何体 - 不能移动的静态模型。不包含任何物理性质或碰撞数据。无法被打碎。不能投射阴影。可以通过分配一个细节贴图来自动放置。关卡设计师一般不会逐个放置。是渲染起来最"费劲"的几何体。在低配置机器上甚至可能无法渲染。
例子:草地,岩石,植物。 |
prop_static |
静态几何体 - 不动的模型。除了碰撞,不包含其他物理性质,并且无法被打碎。无法拥有关节或动画。投射光照贴图阴影。"廉价"的几何渲染。
|
prop_physics |
拥有内建物理性质的模型。移动和碰撞采用布娃娃物理系统。可以使用铰链或其他的限制器来约束其他物理对象。它也可以配置成一旦受到足够的伤害就会碎裂。投射动态阴影。移动和渲染较"费劲",当服务器设置了sv_turbophysics的时候工作会不正常。
|
prop_ragdoll |
使用布娃娃物理骨骼的物理道具。拥有物理道具的所有特性,并且可以使用严格的身体布娃娃物理系统来拥有多个碰撞和关节。移动和渲染都非常"费劲"。
|
prop_dynamic |
一个可放置在层次结构中,可以拥有关节和播放动画的模型。它也可以配置成一旦受到足够的伤害就会碎裂。可以有层次地连接到其他物体。可以投射动态阴影。渲染起来比静态几何体"费劲",比物理几何体"省力"。
|
prop_physics_multiplayer |
使用简化的物理碰撞系统的模型,专为多人游戏设计。网络开销比起使用标准物理道具要低。对于带宽有限的多人游戏环境来说是有必要的。服务器设置sv_turbophysics的话,工作起来更好。 |
prop_physics_override |
用于覆盖模型内建属性的特殊道具类型。跟prop_physics的渲染成本相同。 |
prop_dynamic_override |
用于转换一个原本被设计用于prop_static的模型,并且给予它prop_dynamic的属性。跟prop_dynamic的渲染成本相同。 |
请查看Source SDK范例地图mapsrc\sdk_prop_types.vmf
,来获取一些道具类型在使用中的例子。
使用中的限制
为了保证"跨地图"道具行为的一致性,Source限制了某种模型只能用于特定的道具类型。举个例子,在一张地图里面,一个基于物理的桶,在另一张图里不应该是静态的,除非有很好的理由这样做。如果你把模型用在错误的道具类型上,游戏也许会将道具从你的地图上删除。
在Hammer的模型浏览器里的"信息(info)"标签页中,有三个复选标记。它们是:"物理(physics)","静态(static)",和"动态(dynamic)"。
- 如果"物理"是勾上的,模型也许只能用于prop_physics或prop_ragdoll,或者prop_dynamic_override。
- "静态"的话要求用于prop_static。
如果你为prop_static使用了错误的模型类型,你会在你的编译日志里得到一个错误信息:
Error! prop_static using model "[model]", which must be used on a dynamic entity (i.e. prop_physics). Deleted.
错误!prop_static正使用模型"[模型名称]",它必须用在一个动态实体(比如prop_physics)上。已删除。
或者是:
Error! To use model "[model]" with prop_static, it must be compiled with $staticprop! Error loading studio model "[model]"!
错误!要在prop_static上 使用模型"[模型名称]",它必须编译成$staticprop(静态道具)! 载入工作室模型"[模型名称]"错误!
如果你放置了一个没有设置物理的prop_physics,你会在游戏里的控制台得到一个错误信息:
prop_physics at [x] [y] [z] uses model [model], which has no propdata which means it must be used on a prop_static. DELETED.
prop_physics在[x] [y] [z]位置使用了模型[模型名称],它没有道具数据,它只能被用在prop_static上。已删除
覆盖实体
- prop_dynamic_override
- 大多数模型都能工作在prop_dynamic上,除了物理模型。如果你想要使用一个物理模型,但不想要其物理特性,可以使用prop_dynamic_override 。
- prop_physics_override :要可以模拟物理的话,必须要有道具数据 编译进它们里面。实体prop_physics_override 允许你从Hammer输入这个数据,而且允许你将大多数模型当成物理道具使用。
创建道具
特定的qc 代码会让你的模型适用于某些类型的道具,而不适用于其他的。
prop_detail | prop_static | prop_dynamic | prop_physics | prop_ragdoll | |
---|---|---|---|---|---|
$staticprop | 是 | 是 | 可选 | 可选 | 不 |
prop_data | 不 | 不 | 不 | 是 | 是 |
$collisionjoints | 不 | 不 | 可选 | 不 | 是 |
$collisionmodel | 不 | 可选 | 可选 | 是 | 不 |
注意: "是"或"不"的意思是道具可能会从游戏中移除,反之如果没有正确完成将不会工作。"可选"意味着该代码可以工作,而且通常是一个好主意。点击链接获取关于如何使用对应的.qc代码,以及他们做了什么的说明。
Prop_detail模型只可使用UnlitGeneric 着色器材质。查看细节道具 获取更多信息。
$staticprop用在移除骨骼和骨骼动画上很有效。如果你的道具需要无骨骼或者无动画,staticprop算得上是一个划算的优化。在Hammer的模型浏览器,如果复选标记"静态(static)"勾上了,你就知道$staticprop已经被使用了。
特点
prop_detail
- 在一个地图里可以有成千上万个这种实体。(Left 4 Dead(求生之路)里的限制是64000个)
- 可以作为.MDL 或者是spr动画。spr动画渲染起来要比MDL快得多。
- 可以在Hammer编辑器里放置,或者通过添加一个材质特性
%detailtype
到一个.vmt文件,为了让Vbsp 能在特定材质上自动生成细节道具(下面描述的)。 - 永远都不会跟它们发生冲突。
- 具有恒定颜色的发光(为了优化)
- 不会影响地图上的光照贴图。
- 当它们和玩家的距离超出一个特定的值之后,它们会自动淡出。(由控制台变量
cl_detaildist
和cl_detailfade
控制)。 - 有时候甚至无法在低端硬件上渲染。
- 必须在模型的.qc 文件编译时包含
$staticprop
。 - 没有网络开销 + 非常低的内存使用。
- 并不是一个真正的实体,没有输入(inputs)或输出(outputs)。
- 可能没有动画。
- 无法被有层次的附加到其他实体。
- 从一个可见性的角度来看,它们被假定为是点。
prop_static
- 在一个地图里可以有成千上万个这种实体。
- 可以在Hammer编辑器里放置。
- 它们之间可以有碰撞。
- 会影响地图里的光照贴图,可以投射光照贴图阴影。
- 顶点会发光,就像标准的工作室模型。
- 使用LOD 系统。
- 用户可选择是否让道具用低端硬件模式渲染。
- 可以在Hammer编辑器里设置淡入淡出距离。
- 必须在模型的.qc 文件编译时包含
$staticprop
。 - 没有网络开销 + 非常低的内存使用
- 并不是一个真正的实体,没有输入或输出。
- 可能没有动画或关节。
- 无法被有层次的附加到其他实体。
- 从优化可见性的角度来看,它使用凹凸的物体。
prop_dynamic
- 在一个地图里可以有成千上万个这种实体。
- 可以在Hammer编辑器里放置。
- 它们之间可以有碰撞。
- 不会影响地图里的光照贴图,但可以投射动态阴影。
- 顶点会发光,就像标准的工作室模型。
- 使用LOD。
- 可以在低端硬件上渲染。
- 可以在Hammer编辑器里设置淡入淡出距离。
- 在编译模型的时候可以不使用
$staticprop
。 - 可以有动画。
- 低(但不为零)的网络开销 + 更高的内存使用(不亚于任何其他实体)。
- 它是一个真正的实体,拥有输入和输出。
- 可以有层次的附加到其他实体。
- 从优化可见性的角度来看,它使用凹凸的物体。
- 从一个可见性的角度来看,它们被假定为是盒。
prop_physics
- 在一个地图上可以有几十到几百个实体,取决于复杂度。
- 可以在Hammer编辑器里放置。
- 它们之间一定有碰撞。
- 不会影响地图里的光照贴图,但它们投射动态阴影。
- 顶点会发光,就像标准的工作室模型。
- 使用LOD 系统。
- 可以在Hammer编辑器里设置淡入淡出距离。
- 在低端硬件上如果没有改变设置,它们会更早的淡出。
- 在编译模型的时候可以不使用
$staticprop
。 - 可以有动画。
- 低(但不为零)的网络开销 + 更高的内存使用(不亚于任何其他实体)。
- 它是一个真正的实体,拥有输入和输出。
- 无法被有层次的附加到其他实体。
- 可以被其他各个物理约束实体所约束。
- 从优化可见性的角度来看,它使用凹凸的物体。
- 从一个可见性的角度来看,它们被假定为是盒。
- 额外的特征?
prop_ragdoll
- 和
prop_physics
一样,不过可以使用骨架,用于布娃娃物理。 - 具有非常高的网络开销。