Moderator elections are being held. See Valve Developer Community:Moderator elections for more details.
Users who would like to run for moderator must be autoconfirmed and have at least 100 edits. Users can check their own edit count at Special:Preferences.

道具类型概述

From Valve Developer Community
Jump to: navigation, search
English (en)Русский (ru)中文 (zh)
... Icon-Important.png

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

道具类型

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

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

参见