道具类型概述

From Valve Developer Community
Jump to: navigation, search
English Русский

在Source里,"prop(道具)"这个词通常是"代码仿真模型实体"的代名词。有各种道具的实体类,每一个都代表着具有特定功能的模型。选择它们中的每一个都有具体的原因,并且不同的人对功能和性能方面有着不同的需求。

道具类型

下表列出了关卡设计者能放置的主要道具类型,以及它们的总体特征:

模型实体 属性
prop_detail 带细节的几何体 - 不能移动的静态模型。不包含任何物理性质或碰撞数据。无法被打碎。不能投射阴影。可以通过分配一个细节贴图来自动放置。关卡设计师一般不会逐个放置。是渲染起来最"费劲"的几何体。在低配置机器上甚至可能无法渲染。


例子:草地,岩石,植物。

prop_static 静态几何体 - 不动的模型。除了碰撞,不包含其他物理性质,并且无法被打碎。无法拥有关节或动画。投射光照贴图阴影。"廉价"的几何渲染。

BR 例子:管道,灯具,岩石,电线杆。

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_detaildistcl_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一样,不过可以使用骨架,用于布娃娃物理
  • 具有非常高的网络开销。

参见