UDN
Search public documentation:

WeaponsTechnicalGuideCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 主页 > 游戏性编程 > 武器系统技术指南

武器系统技术指南


概述


虚幻中武器是可以供玩家使用的武器库道具,通常用来点燃某种射弹。在虚幻引擎 3 中发现的默认武器系统可以显示在表面满足需要创建在很多第一人称射击类游戏中常见的不同类型枪支,但是实际上创建其他类型武器以及可能出现在其他类型的游戏中的可使用道具十分容易,例如,治愈伙伴的法术、捕获怪物的网或者可能是击晕敌人的回飞棒。甚至可以设想对武器系统进行修改并在不同的运动游戏中使用;可能是在一场高尔夫游戏中玩家背包中所存在的不同俱乐部。通过创新和虚心学习,可以轻松地使虚幻引擎 3 中的武器系统符合任何类型游戏的需求和约束条件。

该文档的目的是为您提供一个有关武器系统工作原理以及创建一个新武器的简单过程的快速概述。 首先,将会从武器库控制的角度将武器与 pawn 进行互动的过程划分为几个部分进行讲解,其中包括赋予 pawn 武器,选择及丢弃武器等等。然后将会讲解武器开火时会执行的序列,显示具体哪些函数和声明是流程中不可或缺的。最后,将会列出很多归属于各种武器类的重要函数和属性及各自的说明描述。通过所有这些信息,您应该开始知道武器系统怎样可能适用于您的游戏以及哪些地方需要调整、修改或者忽略。

有关设置武器方面的内容的更多信息,请参阅设置武器

武器库


虚幻中的 Inventory(武器库)系统提供了一种可以记录游戏中属于每个玩家的所有道具。每个玩家都有他们自己的 InventoryManager,它可以控制拾取、扔掉、装备使用武器库道具等等。可以放置在玩家武器库中的道具都是由武器库基类衍生而来,这些类会为它们提供一个需要在武器库系统中使用以及由 InventoryManager 管理的函数和属性的特定子集。

武器库管理

Weapon 是 Inventory 的子代,所以有两种方法可以让武器最终处于 pawn 武器库中。 可以通过 Pawn.GiveWeapon() 函数直接将武器赋给 pawn,或者通过使用 DroppedPickup 或 PickupFactory 这两个 actor 来将武器分配给 pawn。 当武器被放置到世界中时创建了 DroppedPickup,它代表武器的物理存在。 当玩家抛出一个物品(有意为之或者角色死亡时)时它们也会在 Inventory.DropFrom() 中创建。 这个 PickupFactory actor 通常表示关卡设计师放置在地图中的 actor。 这些 actor 决定是否要给出一个物品,并负责该物品在世界的状态。

DroppedPickup 和 PickupFactory 都是将一件已经存在的物品赋予一个 pawn。 这是通过执行 Item.GiveTo() 函数。 这个函数告诉 InventoryManager 将一个物品通过 InventoryManager.AddInventory() 函数添加到一个 pawn 的武器库里。

第二种将武器赋给 pawn 的方法是通过 Pawn.GiveWeapon()。 这是一个辅助函数可以让非物理存在的 actor(如 GameInfo或Mutator)轻松地将武器赋给 pawn,不需要它本身生成武器。 它通过调用 InventoryManager.CreateInventory() 来实现,把武器的类作为参数传给该函数来创建。

在将武器赋给 pawn 后必须先激活才能够使用。 一般情况下,激活是通过用户输入,通常是 PlayerController.NextWeapon() 或 PlayerController.PrevWeapon() 和 InventoryManager.SwitchToWeaponClass() 函数。 这些函数执行一些逻辑,当选择好了新武器以后就调用 InventoryManager.SetCurrentWeapon()。

SetCurrentWeapon() 是激活一件武器的主起始点。 它有一个参数DesiredWeapon,是你希望激活的武器的引用,该函数只能从本地client调用。 调用以后,它回执行一段代码来将当前武器放下(放回到inventory然后反激活)。 图 1 所示直观地显示了系统工作过程。

figure1.jpg

InventoryManager使用PendingWeapon属性来决定当放下武器序列结束时切换成哪个武器。 SetCurrentWeapon()设置该属性然后调用Weapon.TryPutDown()。 这个函数开始进行取消激活武器过程。

Weapon.TryPutDown() 应该尝试切换成 WeaponPuttingDown 状态。 如果条件不允许,武器会设置 bWeaponPutDown 属性。 这个属性会在许多切换武器的过程中被检查,来确定放下武器是否被请求过。 如果 TryPutDown() 成功执行,那么或者进入了 WeaponPuttingDown 状态或者设置了 bWeaponPutDown 标志,它应该返回 true。 否则它返回 false。

如果放下武器的尝试成功了,SetCurrentWeapon() 会调用 ServerSetCurrentWeapon() 来开始服务端的过程。 服务端过程与SetCurrentWeapon()几乎完全一样,但需要注意两点。 首先,ServerSetCurrentWeapon()假定客户端的TryPutDown()成功了。 第二,如果 InventoryManager 是本地控制的,需要考虑监听服务器以及限制服务端对 TryPutDown() 的调用。

所有上述的内容假定当前有一个武器。 如果没有,TryPutDown() 被跳过,程序直接执行到 ChangedWeapon()。 在我们讨论 ChangedWeapon() 之前,先来看看 WeaponPuttingDown 和其他武器状态。

对于武器有六种重要的状态。 它们是:

  1. Inactive - 通常,当武器没有被使用的时候它处于 inactive 状态。这意味着武器被隐藏,它也不会收到 StartFire() 和 EndDire() 事件。 默认情况下,它表示武器被隐藏,同时它不会收到 StartFire() 和 EndDire() 事件。
  2. Active - 当武器在手中而且还没有开火的时候它处于 active 状态。 在这个状态下调用 StartFire() 会开始开火序列。
  3. WeaponEquipping - 当你第一次激活一件武器(通过调用它的 Activate() 函数)它会进入 WeaponEquipping 状态。 这里会播放“掏出武器”的动画和特效。 变成 active 状态需要的时间由 TimeWeaponEquipping() 来控制。
  4. WeaponPuttingDown - 这个状态表示一件武器被放下并且被反激活。 通常是在 TryPutDown() 函数中进入该状态,或者由于延迟检查 bWeaponPuttingDown 而进入该状态。 和 WeaponEquipping 一样,应该播放相关的动画和特效,时间由 TimeWeaponPutDown() 来确定。
  5. PendingClientWeaponSet - 这是一个特殊的状态,只有在客户端才会进入该状态。 武器激活虽然被激活,但它的关键初始信息还没有被复制(比如 instigator 或 owner)。 进入这个状态以后,武器会定时检查这些值是否到位。全部到位以后,才会继续进入 WeaponEquipping 状态。
  6. Firing - 这是负责大部分任务的状态。通过 StartFire 触发,通常在 FiringStatesArray 中指定为 'Firing'

除了 PendingClientWeaponSet 状态,武器会在客户端和服务端平行进入不同的状态,并在需要的时候分枝。本文后面继续深入讨论。

武器被放下以后,InventoryManager.ChangedWeapon() 会被调用,从武器的 WeaponPuttingDown 状态的 WeaponIsDown() 函数中调用。ChangedWeapon() 负责实际的更改 pawn 的武器属性,并通知其他对象。 最后,它激活新武器。

同样,这是在客户端和服务端平行发生的。 这样可以避免由于服务端需要追赶状态导致的视觉延迟。 以后你会看到武器代码使用 PendingFire 系统来良好的解决这个问题。

Weapon.Activate() 调用了以后,武器会转成 WeaponEquipping 状态。 从上面的列表中我们可以看到这个状态负责初始化需要用到的武器,并播放“拿出武器”动画和特效。 武器的“装备”由 TimeWeaponEquipping() 函数来控制。 是在这个函数中武器的网格被连接到pawn的网格,然后播放动画。 最后,会为 EquipTime 设定一个定时器,当定时结束时,WeaponEquipped() 函数被调用。武器装备上了以后会转成 active 状态,就可以使用了。

武器


很明显,Weapon 类是虚幻中的武器系统的重点内容。这其中包含确定武器应该如何起作用及工作的逻辑方法。其中大部分内容讲述的是开火射击,但是它可能会在武器“被使用”的时候帮助在更为常见的角度考虑“开火”概念。它使虚幻中的武器概念脱离了狭隘的枪支定义并更偏向于将其定义为玩家可以在游戏中使用执行一些操作的道具。当然,如果您的游戏是一款射击类游戏,这不应该是什么问题,因为这个术语将会与您的概念非常吻合。在可能对于武器是什么或者可以用作什么有其他观点的游戏实例中,这个抽象概念可以使您更加轻松地熟悉武器系统。

武器开火模式

虚幻中的武器可以有多种模式。默认情况下,这些是 Fire 和 Alt Fire,并且分别通过点击左和右鼠标按钮执行。每个开火模式的工作方式完全不同。以 Link Gun 为例。主要开火模式会在alt开火模式发射恒定的电波时射出血浆射弹。这些完全不一样,而且必须在负责执行每个开火模式的代码中进行处理。一个武器可以包含多个开火模式,而不仅仅是两个,前提有一个为驱动每种不同的开火模式采用的机制。它并没有内置到默认系统中。将需要在输入系统中创建新绑定,而且可能需要添加新方法来帮助添加诸如此类的功能。

武器射击类型

武器决定如何发射以及它要击中(或作用)的东西的方法由当前开火模式的射击类型控制。Unreal has two defined firing types by default: 即时射击以及射弹射击。即时射击就像它的名字所隐含的意思一样。它在射击后就马上进行追踪来立即确定所击中的目标以及分配伤害或任何其他预期的结果。射弹射击也同样名副其实。在使用射弹开火模式的时候,会生成一个新的射弹,然后向武器瞄准的方向发射。接下来射弹会接管并确定它要击中的东西并分配伤害或其他结果。

除了这些定义的开火模式之外,这两种模式在需要的时候都还可以进行修改,也就是还有一种Custom Fire(自定义射击)类型。该类型的操作没有进行定义,可以完全按照您的需要进行自定义。这可以使得武器系统具有非常强的灵活性,因为它允许您构思任何您希望武器具有的效果并予以实现。

开火序列

只要有了一个激活的武器以后,该武器就可以从玩家控制器接收开火事件了。 在你看开火代码之前,你可以先看看 Weapon.uc 中变量声明和 inventory 函数如 HasAmmo() 等。 在默认情况下,UE3 的武器系统只包含 stub 函数来处理弹药,实际的实现由具体游戏来完成。

下面是 Weapon.uc 中的一段注释,它概要讲述了开火序列。

武器开火逻辑

在这里将武器系统设计为可以同时在授权服务器和本地客户端上遵循同样的流程的独立代码路径。 远程客户端不了解有关武器的任何信息,而是使用 WeaponAttachment 系统查看最终结果。

  1. 1.本地客户端的 InventoryManager 接收到一个 StartFire 调用。 它会调用 StartFire()。
  2. 如果本地客户端未授权,它会通过 ServerStartFire() 来通知服务器。
  3. StartFire() 和 ServerStartFire() 通过调用 BeginFire() 来同步。
  4. BeginFire 为后面的开火模式设置 PendingFire 标识
  5. BeginFire 会查看当前的状态,如果正处于 active 状态,它会通过进入新的开火状态来启动开火序列,而开火状态在 FiringStatesArray 数组中定义。 调用 SendToFiringState 来进入开火状态。
  6. 开火逻辑是通过不同的开火状态来处理的。 开火状态主要负责进行以下操作:
    1. 如果它们的关联 PendingFire 正在走强,那么继续开火
    2. 在没有弹药的时候转换为新的武器
    3. 在不再开火的时候转换为“活动”状态

武器系统还会从 IM 中接收到 StopFire() 事件。 当这种情况发生的时候,请按照下面的步骤进行操作:

  1. IM 在 Local Client(本地客户算)上调用 StopFire()。
  2. 如果武器停火没有在权威过程,它通过 ServerStopFire() 事件来通知服务器。
  3. 通过调用 EndFire() 来让 StopFire() 和 ServerStopFire() 保持同步。
  4. EndFire() 为下一个开火状态清除 PendingFire 标识。

在执行它们的过程中开火状态应该是相同的,根据需要向外分支。 例如,在默认的开火状态 ('WeaponFiring') 中,函数 FireAmmunition() 会出现在所有的适用过程中。

有许多因素要考虑,所以我们来详细看看整个序列,从 PlayerController 开始。 当 PlayerController 接收到一个 StartFire() 执行命令,它会告诉 pawn。 pawn 接着告诉 InventoryManager,而 InventoryManager 通过调用 Owner.Weapon.Start() 来启动整个序列。 PlayerController 负责识别出玩家要使用哪个开火模式,并把这个信息传递出去。 接下来,Weapon.CurrentFireMode 属性会在合适的时间被设置。

StartFire()调用了以后,武器会做一次快速的弹药检查,如果检查失败,它会尝试切换到一件更好的武器。 如果弹药检查成功,它会调用BeginFire()。 除此之外,如果 StartFire() 是在一个远程客户端启动的,那么该武器会在服务端通过 ServerStartFire() 被复制,而 ServerStartFire() 接着会调用 BeginFire()。 Weapon.BeginFire() 就是武器平行运行在客户端和服务端的起始点。 从这里,你会看到代码只会因为需要处理特效而分枝。在大多数状态里,BeginFire() 所做的就是保证 PendingFire 字节标识为所选的开火模式得到了设置。

只有在 active 状态武器才能够开始开火序列,而这是通过调用 Weapon.SendToFiringState() 进行的。 而这是通过调用 Weapon.SendToFiringState() 进行的。 这个函数将武器转为 WeaponFiring 状态。 进入新状态以后,武器会立即试图通过调用 FireAmmunition() 函数来开一枪。 然后它通过调用 TimeWeaponFiring() 来设置开火序列的时间。

默认情况下,FireAmmunition() 非常简单,如下所示:

/**
 * FireAmmunition: 执行所有与开火射击相关的逻辑方法
 * - 发射弹药(立即攻击或生成射弹)
 * - 消耗弹药
 * - 播放任何相关的效果(射击声音诸如此类的东西)
 *
 * 网络: LocalPlayer及Server
 */

simulated function FireAmmunition()
{
   // 使用弹药开火
   ConsumeAmmo( CurrentFireMode );

   // 如果是本地玩家,那么播放开火效果
   PlayFiringSound();

   // 处理不同的射击类型
   switch( WeaponFireTypes[CurrentFireMode] )
   {
      case EWFT_InstantHit:
         InstantFire();
         break;

      case EWFT_Projectile:
         ProjectileFire();
         break;

      case EWFT_Custom:
         CustomFire();
         break;
   }
}

FireAmmunition() 函数负责启动实际的“射击”,并检查 WeaponFireType 来得到当前的开火模式。 如果武器是立即命中的(EWFT_InstantHit)那么调用 TraceFire()。 TraceFire() 负责跟踪一次射击并控制任何命中。 对于发射出弹丸的武器(DWFT_Projectile)那么调用ProjectileFire()函数。 这个函数负责刷出并初始化弹丸。 最后,如果是用户自定义开火类型(EWFT_Custom)那么调用 CustomFire() 函数。

TimeWeaponFiring() 会为当前开火模式设置一个定时器,定时触发 RefireCheckTimer() 函数。 RefireCheckTimer() 将查看是否需要进行状态转换,或者再做一次射击。 如果武器没有弹药了或者当前开火模式的 PendingFire 字节标识不再设置了,那么状态转换是必须的。 ShouldRefire() 函数处理相关逻辑来决定武器是否继续开火,或者中止射击回到 active 状态。

和启动开火序列一样,停止序列也是从 PlayerController 开始,并遵循一条相同的代码路径。 PlayerController 会通知 pawn,pawn 通知 InventoryManager,InventoryManager 通知当前的武器。 武器的 StopFire() 会根据需要分枝到 ServerStopFire(),最终由 EndFire() 清除 PendingFire 字节标识。

武器属性

这些属性可以在 Weapon 基类中找到。它们是虚幻中所有武器的共有属性,与基础和常见武器功能有关。

AI

  • ShouldFireOnRelease - 通知 AI 是否需要为在每个开火模式中开火的武器松开开火按钮。值为 0 代表触发按下事件。其他值代表松开按钮时开火。
  • bInstantHit - 如果该选项为 true,它会通知 AI 该武器是立即命中武器。
  • bMeleeWeapon - 如果该选项为 true,它会通知 AI 该武器是近战武器。
  • AIRating - 指定在机器人决定要使用在它们的武器库中的哪种武器或是否拾取这个武器的时候武器的受欢迎程度。

开火及计时

  • FiringStatesArray - 要用于每种射击模式的开火状态的列表。默认系统会使用 WeaponFiring 状态。
  • WeaponFireTypes - 要用于每种射击模式的射击类型EWFT_InstantHit - 武器会跟踪射击来确定是否击中,然后立即产生效果。 EWFT_Projectile - 武器会生成一个指向瞄准线的新射弹。 EWFT_Custom - 需要实现一个自定义的开火序列。 EWFT_None - 武器没有开火。
  • WeaponProjectiles - 要用于每种开火模式的射弹的类的列表,假定这个开火模式使用的是EWFT_Projectile射击类型。
  • FireInterval - 设置武器进行一次开火所需要的时间。
  • Spread - 设置要用于每种开火模式的射击之间的传播量。
  • InstantHitDamage - 为设置通过这个武器的即时击中射击应该造成的伤害量。
  • InstantHitMomentum - 为每种开火模式设置通过这个武器的即时击中射击在每种开火模式中应该施加的动力。
  • InstanthitDamageTypes - 为每种开火模式设置用于通过这个武器的即时击中射击的伤害类型。
  • FireOffset - 设置要在为这个武器生成射弹的时候使用的偏移量。
  • WeaponRange - 这个武器可以开火的最大距离。它可以用于在诸如InstantFire()、ProjectileFire()、AdjustAim()等等函数中执行的跟踪。

武器

  • EquipTime - 设置装配这个武器所需要的时间。
  • PutDownTime - 设置存放这个武器所需要的时间。
  • bWeaponPutDown - 如果将该选项设置为true,那么这个武器将会在当前状态结束的时候存放。
  • bCanThrow - 如果该选项为true,那么玩家会将该武器扔掉。通常对那些在默认武器库中的武器设置为false。

网格物体和动画

  • Mesh - 设置用于武器的网格物体(在这里不限制类型,但是虚幻会都当成是骨架网格物体)。这是第一人称网格物体。
  • DefaultAnimSpeed - 设置在没有指定持续时间的时候回放与这个武器相关的动画的速度。

武器函数

弹药

  • GetProjectileClass - 返回与当前开火模式对应的射弹类。
  • FireAmmunition - 执行所有与为当前开火模式而进行的射击相关的逻辑,例如,调用InstantFire()、ProjectileFire()或CustomFire()。
  • ConsumeAmmo [FireModeNum] - 在武器开火的时候调用用来相应地调整弹药数的存根函数。子类需要重载这个函数。
    • FireModeNum - 要消耗弹药的当前开火模式。
  • AddAmmo [Amount] - 调用来为该武器添加弹药的函数存根。子类需要重载这个函数。
    • Amount - 要添加的弹药量。
  • HasAmmo [FireModeNum] [Amount] - 为给定开火模式返回这个武器是否有弹药。子类应该重载这个类,因为它默认为始终返回true。
    • FireModeNum - 要检查弹药的开火模式。
    • Amount - 可选项。要检查的弹药的数量。如果没有指定,那么检查所有弹药。
  • HasAnyAmmo - 返回武器是否有弹药,不考虑开火模式。子类应该重载这个类,因为它默认为始终返回true。
  • WeaponEmpty - 在开火过程中武器用光弹药的时候调用的函数存根。子类需要重载这个类。

AI

  • IsFiring - 返回武器当前是否在开火。
  • GetAIRating - 返回这个武器的AIRating。
  • GetWeaponRating - 返回代表要使用这个武器的接受程度的权重。
  • CanAttack [Other] - 返回武器是否在可以攻击给定Actor的范围内。子类应该重载这个类,因为它默认为始终返回true。
    • Other - 引用要攻击的Actor。
  • FireOnRelease - 返回武器是否在松开按钮的时候开火。
  • NotifyWeaponFired [FireMode] - 通知AI武器已经进行开火。
    • FireMode - 进行开火的开火模式。
  • NotifyWeaponFinishedFiring [FireMode] - 通知AI武器已经停止开火。
    • FireMode - 停止开火的开火模式。
  • RecommendLongRangedAttack - 返回机器人是否应该使用这个武器进行长距离攻击。

Aim(瞄准)

  • GetViewAxes [XAxis] [YAxis] [ZAxis] - 输出武器所有者的基础视图瞄准旋转轴。
    • XAxis - 输出端。输出X轴分量。
    • YAxis - 输出端。输出Y轴分量。
    • ZAxis - 输出端。输出Z轴分量。
  • GetAdjustedAim [StartFireLoc] - 允许武器、pawn和控制器对武器所指的地方进行快速调整。
    • StartFireLoc - 射击开始开火的初始点。
  • AddSpread [BaseAim] - 向基础瞄准旋转器添加任何传播偏移并返回调整的瞄准旋转量。
    • BaseAim - 基础瞄准旋转量。
  • GetTargetDistance - 计算从相机到视图中心的任何东西的近似Screen(画面)距离。可以用于对瞄准线进行立体效果处理减少眼睛疲劳。
  • AdjustFOVAngle [FOVAngle] - 允许武器修改玩家的视角并返回调整后的FOV角度的函数存根。子类需要重载这个类。
    • FOVAngle - 保存输入FOV角度。
  • GetPhysicalFireStartLoc [AimDir] - 返回生成射弹的世界位置,沿着AimDir方向进入Pawn的碰撞。
    • AimDir - 可选项。武器所瞄准的方向。

Damage(伤害)

  • GetDamageRadius - 返回当前开火模式中射弹的伤害半径,或者在即时击中的情况下返回0。
  • PassThroughDamage [HitActor] - 返回通过这个武器进行的即时开火射击是否应该击中给定的actor或忽略它。
    • HitActor - 引用要测试的Actor。
  • ProcessInstantHit [FiringMode] [Impact] [NumHits] - 通过即时开火射击中处理成功的击中。对击中Actor产生伤害并可以生成任何必需的效果。
    • FirignMode - 已经开火射击的开火模式。
    • ImpactInfo - 有关击中Actor的信息。
    • NumHits - 可选项。应用伤害的击中的数量。可以用于多击中武器。例如,猎枪。

* Effects(特效)

  • PlayFireEffects [FireModeNum] [HitLocation] - 用于播放武器在开火的时候的任何火焰特效的函数存根(例如,枪口火焰等等)。子类需要重载这个类。
    • FireModeNum - 要播放特效的开火模式。
    • HitLocation - 可选项。用于播放特效的位置。
  • StopFireEffects [FireModeNum] - 停止任何激活的特效的函数存根。子类需要重载这个类。
    • FireModeNum - 要停止特效的开火模式。
  • IncrementFlashCount - 可以增加用于在远程客户端上播放武器开火效果的Pawn的FlashCount变量。
  • ClearFlashCount - 清除Pawn的FlashCount变量。
  • SetFlashLocation [HitLocation] - 设置要被复制到播放开火特效的所有客户端的通过武器开火进行的击中的位置。
    • HitLocation - 武器开火击中的位置。
  • ClearFlashLocation - 清除闪光位置并停止武器开火特效。
  • GetMuzzleLoc - 返回生成的视觉效果的世界位置。

开火及计时

  • StartFire [FireModeNum] - 在本地玩家上进行调用开始开火过程。将调用传递给服务器并在本地模拟开火特效。
    • FireModeNum - 进行开火的开火模式。
  • ServerStartFire [FireModeNum] - 在服务器上进行调用开始开火过程并复制到所有客户端。
    • FireModeNum - 进行开火的开火模式。
  • BeginFire [FireModeNum] - 将给定的开火模式设置为待处理状态。由本地玩家和服务器进行嗲用,同步开火过程。
    • FireModeNum - 进行开火的开火模式。
  • StopFire [FireModeNum] - 在本地玩家上进行调用,停止正在开火的武器。
    • FireModeNum - 要停止开火的开火模式。
  • ServerStopFire [FireModeNum] - 在服务器上进行调用,停止一个正在开火的武器并复制到所有客户端。
    • FireModeNum - 要停止开火的开火模式。
  • EndFire [FireModeNum] - 将给定的开火模式设置为不再处于待处理状态。由服务器在所有客户端上进行调用,同步关闭开火过程。
    • FireModeNum - 要停止开火的开火模式。
  • ForceEndFire - 在本地客户端阻止所有开火模式开火。不进行复制。
  • SendToFiringState [FireModeNum] - 将武器设置为给定开火模式的开火状态并将该开火模式设置为当前模式。
    • FireModeNum - 开火模式,设置为当前模式。
  • SetCurrentFireMode [FiringModeNum] - 将给定的开火模式设置为当前模式。
    • FiringModeNum - 开火模式,设置为当前模式。
  • FireModeUpdated [FiringMode] [bViaReplication] - 在武器所有者的FiringMode发生变化的时候进行调用。
    • FiringMode - 新的开火模式。
  • CalcWeaponFire [StartTrace] [EndTrace] [Impactlist] [Extent] - 模拟一个即时的开火射击并将第一个几何体返回座位返回值。不通过这个函数处理伤害。它只供获取一个击中物列表。
    • StarTrace - 要开始进行跟踪的位置。
    • EndTrace - 要结束跟踪的位置。
    • ImpactList - 可选项。输出一个所有在开火模拟过程中发生的撞击的列表。
    • Extent - 可选项。要进行的跟踪的范围。
  • InstantFire - 进行一次即时开火射击。使用CalcWeaponFire()获取Actor击中和ProcessInstantHit()处理击中的情况。
  • ProjectileFire - 进行一次射弹开火演示。在武器瞄准的方向发射一个射弹,然后通知客户端武器已经开火。
  • CustomFire - 实现自定义开火模式的函数存根。不使用射弹或即时击中开火模式的子类应该重载这个函数来添加它们的自定义开火功能。
  • GetPendingFireLength - 返回保存这个武器的所有开火模式的待处理开火的数组长度。
  • PendingFire [FireMode] - 返回这个武器的给定开火模式是否有一个待处理开火。
    • FireMode - 要检查是否有待处理开火的开火模式。
  • SetPendingFire [FireMode] - 将给定开火模式设置为待处理状态。
    • FireMode - 要设置的开火模式。
  • ClearPendingFire [FireMode] - 将这个武器的给定开火模式设置为不再处于待处理状态。
    • FireMode - 要设置的开火模式。
  • MaxRange - 返回这个武器开火的时候可以到达的最大距离。
  • GetFireInterval [FireModeNum] - 返回武器的给定开火模式的射击之间的秒数。
    • FireModeNum - 要获取时间间隔的开火模式。
  • TimeWeaponFiring [FireModeNum] - 为执行RefireCheckTimer()函数的开火状态设置计时器,并且按照与给定的开火模式相同的开火间隔时间来进行循环。
    • FireModeNum - 要设置计时器的开火模式。
  • RefireCheckTimer - 在开火状态中,可以检查看看是否应该再开火一次,如果是的话就开火。
  • GetTraceRange - 返回在CalcWeaponFire()、InstantFire()、ProjectileFire()、AdjustAim()等等的踪迹中使用的武器的范围。子类应该以正确的状态重载它。
  • GetTraceOwner - 返回拥有这个武器的踪迹的Actor。用于强制踪迹忽略这个Actor。
  • GetPhsyicalFireStartLoc [AimDir] -
  • HandleFinishedFiring - 当武器完成开火后将它发送返回到 'Active' 状态。
  • ShouldRefire - 返回武器是否应该继续开火。在每次射击开火之后通过开火状态进行调用。默认操作是在玩家按下开火按钮的时候继续开火。子类可以以它们的开火状态重载这个函数来改变操作。
  • StillFiring [FireMode] - 返回该武器是否仍然在使用给定的开火模式开火。
    • FireMode - 要检查的开火模式。

武器

  • ItemRemovedFromInvManager - 通过通知武器已经从玩家的武器库中移除的InventoryManager进行调用。默认情况下,强制开火停止并拆除武器。
  • IsActiveWeapon - 返回当前该武器是否处于激活状态。
  • HolderDied - 通过拥有的Pawn进行调用来通知武器这个Pawn已经死亡。默认情况下,停止使用该武器。
  • DoOverrideNextWeapon - 允许武器重载到下一个武器功能的转换。从本质上讲,它允许武器在开火的时候使用鼠标滑轮(或要转换到下一个武器所绑定的东西),例如,物理枪械会使用它更改与所控制的对象之间的距离。只可以在武器的开火状态中使用,否则它会弄坏实际的武器转换。
  • DoOverridePrevWeapon - 允许武器重载到上一个武器功能的转换。只可以在武器的开火状态中使用,否则它会弄坏实际的武器转换。
  • DropFrom [StartLocation] [StartVelocity] - 由Inventory继承而来。将武器脱离放到世界中。默认情况下,停止开火,拆除武器,然后调用父代类的DropFrom()函数丢下该武器并将它从玩家的武器库中移除。
    • StartLocation - 要丢下该武器的位置。
    • StartVelocity - 在武器被丢下的时候要赋予它的速度。
  • CanThrow - 返回该武器是否可以被玩家丢弃。
  • DenyClientWeaponSet - 返回该武器是否应该拒绝被切换。默认为始终返回false,这样才可以对该武器进行转换。
  • TimeWeaponPutDown - 为WeaponIsDown()函数完成执行时收起该武器设置计时器。
  • TimeWeaponEquipping - 为WeaponEquipped()函数完成执行时装配该武器设置计时器。
  • Activate - 由Inventory继承而来。通过将武器发送到 'WeaponEquipping' 状态来开始装配过程。
  • PutDownWeapon - 通过将武器发送到 'WeaponPuttingDown' 状态来开始收起武器的过程。
  • DenyPickupQuery [ItemClass] [Pickup] -
  • TryPutDown - 尝试收起武器。如果可以收起武器,则返回true。
  • WeaponIsDown - 在收起武器的时候进行调用的函数存根。子类应该重载这个函数来执行任何希望预期操作。
  • ClientWeaponThrown - 在客户端上调用来通知客户端丢弃武器。停止开火并拆除武器。
  • ClientGivenTo [NewOwner] [bDoNotActivate] - 在将武器给予一个新的Pawn时由服务器进行调用。
    • NewOwner - 引用收到给予的武器的Pawn。
    • bDoNotActivate - 如果该选项为true,那么不会自动激活这个武器。
  • ClientWeaponSet [bOptionalSet] [bDoNotActivate] - 由服务器进行调用来通知在武器库中有一个新的武器,然后决定是否转换到这个新武器。
    • bOptionalSet - 如果该选项为true,那么Inventorymanager将会比较这个Pawn的武器库中的所有武器的权重,决定是否转换为新武器。否则,强制进行转换,不考虑武器的权重。
    • bDoNotActivate - 可选项。如果该选项为true,那么不会自动激活这个武器。

网格物体和动画

  • GetWeaponAnimNodeSeq - 为武器用来播放动画的AnimNodeSequence返回一个参数。
  • PlayWeaponAnimation [Sequence] [fDesiredDuration] [bLoop] [SkelMesh] - 在武器的网格物体上播放给定的动画。
    • Sequence - 要播放的动画序列的名称。
    • fDesiredDuration - 要播放动画的时间。
    • bLoop - 可选项。如果该选项为true,那么动画应该循环播放。
    • SkelMesh - 可选项。引用要播放动画的骨架网格物体组件。如果没有进行设置,那么会使用这个武器的基础网格物体。
  • StopWeaponAnimation - 停止在武器上播放的任何动画。
  • AttachWeaponTo [MeshCpnt] [SocketName] - 将武器的网格物体附加到指定的位置。
    • MeshCpnt - 要附加到的骨架网格物体组件的函数存根。子类需要重载这个类。
    • SocketName - 要附加到的网格物体上的插槽的名称。
  • DetachWeapon - 将武器的网格物体从发起者拆除的函数存根。子类需要重载这个类。

Sounds(声效)

  • WeaponPlaySound [Sound] [NoiseLoudness] - 为武器播放给定的声音。
    • Sound - 要播放的SoundCue。
    • NoiseLoudness - 可选项。要播放的声音音量。在这个实现中没有使用。

UDKWeapon属性

UDKWeapon类只会添加一些它自己的属性。

AI

  • bLeadTarget - 如果该选项为true(默认情况下),武器将会指引瞄准的actor。对即时击中武器,忽略这个选项。
  • bConsiderProjectileAcceleration - 如果该选项为true,那么在指引目标的时候会考虑射弹的加速度。

开火及计时

  • AmmoCount - 玩家当前在这个武器中所拥有的弹药数。

网格物体和动画

  • OverlayMesh - 将网格物体设置为用于叠加效果。

UDKWeapon函数

AI

  • BestMode - 返回可以供机器人使用的最佳开火模式的函数存根。子类需要重载这个类。

网格物体和动画

  • SetPosition [Holder] - 在世界中调整枪模型的函数存根。子类需要重载这个类。
    • Holder - 引用持有这个武器的Pawn。

UTWeapon属性

UTWeapon类中的大多数属性更多应该是枪类型武器。在这里,武器系统开始更明确单个武器的工作方式。

AI

  • bFastRepeater - 如果该选项为true,AI会将这个武器视作是一个喷雾器或快速开火武器。
  • AimError - 要通过AI添加给每个射击的最大错误量。
  • AimingHelpRadius - 在这个半径范围内会将近距脱靶视作是实际命中。
  • bUseAimingHelp - 如果该选项为true,那么使用 AimingHelpRadius 确定是否实际命中。

Display(显示)

  • FireCameraAnim - 当武器开火的时候要在玩家的相机上播放的相机动画,例如,由于反冲而产生相机晃动。
  • WeaponColor - 用于在游戏中HUD上描画这个武器名称的颜色。
  • WeaponCanvasXPct - 武器在x轴方向上占的屏幕百分比。
  • WeaponCanvasYPct - 武器在y轴方向上占的屏幕百分比。
  • PlayerViewOffset - 用于放置武器的距离玩家的偏移量,假定右手拿着武器。将这个选项乘以-1可以将武器放置在左手,清零则可以将武器放置在中间。
  • SmallWeaponOffset - 要在使用小型武器时应用的其他偏移量。
  • WideScreenOffsetScaling - 在以宽屏形式显示游戏的时候ViewOffset的系数。
  • WideScreenRotationOffset - 要在以宽屏形式显示游戏的时候应用的旋转偏移量。
  • HiddenWeaponOffset - 只在使用隐藏武器的时候使用的特殊偏移量。为了产生某种特效而必须放置武器,例如附加射束。
  • IconCoordinates - 用于在HUD上描画这个武器的图标的HUD的IconHUDTexture中的坐标。
  • CrossHairCoordinates - 用于在HUD上描画常规瞄准线的这个武器的CrosshairImage中的坐标。
  • SimpleCrossHairCoordinates - 用于在HUD上描画简单瞄准线的这个武器的CrosshairImage中的坐标。
  • LockedCrossHairCoordinates - 用于在HUD上描画锁定瞄准线的这个武器的CrosshairImage中的坐标。
  • CustomCrosshairCoordinates - 用于在HUD上描画自定义瞄准线的这个武器的CrosshairImage中的坐标。
  • CrosshairImage - 包含这个武器的瞄准线的贴图。
  • StartLockedScale - 锁定瞄准线的最小比例。
  • FinalLocakedScale - 锁定瞄准线的最大比例。
  • CrosshairColor - 要在描画这个武器的瞄准线时使用的颜色。
  • CrosshairScaling - 用于缩放这个武器的瞄准线的系数。
  • bUseCustomCoordinates - 如果该选项为true,将会使用CustomCrosshairCoordinates替代SimpleCrossHairCoordinates。
  • AmmoDisplayType - 确定在HUD上显示弹药数的方式。
    • EAWDS_Numeric - 将弹药数显示为一个文本数值。
    • EAWDS_BarGraph - 将弹药数显示为一个栏。
    • EAWDS_Both - 通过栏和文本数值显示弹药数。
    • EAWDS_None - 在HUD上禁用弹药数显示。

* Effects(特效)

  • MuzzleFlashSocket - 在为这个武器附加枪口火焰效果的时候要使用的插槽的名称。
  • MuzzleFlashPSC - 枪口火焰效果的粒子系统组件。
  • MuzzleFlashPSCTemplate - 要在主要开火模式中作为枪口火焰使用的ParticleSystem(粒子系统)。
  • MuzzleFlashAltPSCTemplate - 要在alt开火模式中作为枪口火焰效果使用的ParticleSystem(粒子系统)。
  • MuzzleFlashColor - 要传递到枪口火焰ParticleSystem中的'MuzzleFlashColor'参数的颜色,在这个ParticleSystem存在的情况下。
  • bMuzzleFlashPSCLoops - 如果该选项为true,那么将会允许这个枪口火焰效果循环播放而不是处于非激活状态。它可以用于快速开火武器,例如,小机枪。
  • MuzzleFlashLight - 在武器开火的时候闪耀的光。
  • MuzzleFlashLightClass - 用于枪口火焰光的类。
  • MuzzleFlashDuration - 枪口火焰持续的时间。

开火及计时

  • AmmoPickupClass - 可以为这个武器提供弹药的弹药拾取类。
  • LockerAmmoCount - 从武器寄物柜拾取的武器的初始弹药数。
  • MaxAmmoCount - 这个武器可以容纳的最大弹药数。
  • ShotCost - 通过这个武器的每次射击用光的弹药量。
  • MinReloadPct - 必须在武器可以进行转换之前这个武器每次通过开火模式开火之后传递的最小时间量。
  • bZoomedFireMode - 确定这个开火模式是否可以让视图缩放。值为0代表没有缩放。其他任何值代表缩放。
  • ZoomedTargetFOV - 要在放大的时候使用的视场(FOV)角。
  • ZoomedRate - 在从未缩放到缩放的转换过程中每秒缩放的度数,反之亦然。
  • ProjectileSpawnOffset - 要从开火起点位置偏移射弹生成的距离,以虚幻单位为单位。
  • ZoomedTurnSpeedScalePct - 用于在使用放大的武器的时候调整玩家的转率的系数。

武器

  • InventoryGroup - 该武器所属的武器库组。这是一个从0到9的数值,它与将会使武器在被按下后进行装配的数字键对应。
  • GroupWeight - 该武器在武器库组中的位置。同一组中的武器,值越高,优先级越高。
  • InventoryWeight - 该武器在武器库中的总优先级。它可以用于武器转换。
  • bNeverForwardPendingFire - 如果该选项为true,该武器将永远不会接受转发的待处理开火。

网格物体和动画

  • AttachmentClass - 该武器的附件类。
  • WeaponFireAnim - 在每种开火模式中使用武器时在武器上播放的动画。
  • ArmFireAnim - 当在每种开火模式中使用武器时要在玩家角色(如果你的游戏中有一个角色)的手臂网格物体上播放的动画。
  • ArmsAnimSet - 用于在玩家角色的手臂网格物体上播放动画的动画集。
  • WeaponPutDownAnim - 当收起武器时在武器上播放的动画。
  • ArmsPutDownAnim - 当收起武器时在玩家角色的手臂网格物体上播放的动画。
  • WeaponEquipAnim - 当装配武器时在武器上播放的动画。
  • ArmEquipAnim - 当装配武器时在手臂网格物体上播放的动画。
  • WeaponIdleAnims - 当武器处于空闲状态时在武器上播放的动画。
  • ArmIdleAnims - 当武器处于空闲状态时在玩家角色的手臂网格物体上播放的动画。
  • PivotTranslation - 要偏移武器的旋转拾取网格物体的支点的向量。
  • LockerRotation - 在武器寄物柜中放置拾取网格物体时使用的旋转量。
  • LockerOffset - 在武器寄物柜中放置拾取网格物体时使用的偏移量。

Sounds(声效)

  • WeaponFireSnd - 在每种开火模式中使用武器时播放的SoundCue(声效)。
  • WeaponPutDownSound - 在收起武器时播放的SoundCue(声效)。
  • WeaponEquipSound - 在装配武器时播放的SoundCue(声效)。
  • ZoomInSound - 在武器放大的时候播放的SoundCue(声效)。
  • ZoomOutSound - 在武器缩小的时候播放的SoundCue(声效)。

UTWeapon函数

这些函数是首先在UTWeapon类中定义的函数。这个类的很多函数是由其他武器类继承而来的。您可以在其他章节中找到有关它们的说明。

AI

  • RelativeStrengthVersus [P] [Dist] - 返回在对给定Pawn使用这个武器时这个武器的强度。
    • P - 引用要检查的Pawn。
    • Dist - 保存从武器到目标Pawn的距离。
  • BotDesireability [PickupHolder] [P] [C] - 静态。返回对于AI来说武器的可取程度。在AI决定下一次之后要做的拾取时进行调用。
    • PickupHolder - 引用武器的拾取。
    • P - 引用AI的Pawn。
    • C - 引用AI的控制器。
  • CanHeal [Other] - 返回这个武器是否可以治愈给定的Actor。
    • Other - 引用要治愈的Actor。
  • GetOptimalRangeFor [Target] - 返回向给定目标开火的最佳距离。
    • Target - 引用要对其开火的Actor。
  • SuggestAttackStyle - 返回AI在使用这个武器攻击的时候是应该前进还是后退。通常返回0。子类应该重载这个函数更改操作。
  • SuggestDefenseStyle - 返回AI在防守这个武器攻击的时候是应该前进还是后退。通常返回0。子类应该重载这个函数更改操作方式。
  • RecommendRangedAttack - 返回是否应该使用这个武器进行远程攻击。通常返回false。子类应该重载这个函数更改操作方式。
  • RangedAttackTime - 返回使用这个武器进行远程攻击的持续时间。通常返回0。子类应该重载这个函数更改操作。
  • SplashJump - 返回AI是否应该在开火的时候跳起来来改进溅射伤害。通常返回false。子类应该重载这个函数更改操作方式。
  • ShouldFireWithoutTarget - 返回这个武器是否应该开火,即使是在AI还没有目标的情况下。通常返回false。子类应该重载该函数更改操作方式,例如,一个启动挖掘功能的武器。

Aim(瞄准)

  • InstantFireTraceStart - 返回开始跟踪这个即时击中射击的位置。
  • InstantFireTraceEnd [StartTrace] - 返回这个即时击中射击的终点。
  • InstantAimHelp [StartTrace] [EndTrace] [RealImpact] - 在使用瞄准帮助的时候检查目标的近距脱靶,并将近距脱靶返回为击中。
    • StartTrace - 进行射击的位置。
    • EndTrace - 射击踪迹的终点。
    • RealImpact - 保存从CalcWeaponFire()函数返回的冲击力信息。
  • GetZoomedState - 返回武器的当前缩放状态。
  • CheckZoom [FireModeNum] - 通过BeginFire()调用来检查缩放状态。如果进行了缩放,那么结束开火并返回true。
    • FireModeNum - 要检查缩放状态的开火模式。
  • StartZoom [PC] - 在缩放开始的时候调用。播放放大声音。
    • PC - 引用玩家控制器。
  • EndZoom [PC] - 在缩放结束的时候调用。播放缩小声音。
    • PC - 引用玩家控制器。
  • ThrottleLook [aTurn] [aLookup] - 允许武器调整Pawn的转速的函数存根。子类需要重载这个类。
    • aTurn - 输出。输出调整后的水平转动。
    • aLookup - 输出。输出调整后的垂直转动。
  • CanViewAccelerationWhenFiring - 返回是否允许武器在开火的时候具有观看加速度。通常返回false。子类应该重载这个函数更改操作方式。

弹药

  • GetAmmoCount - 返回武器当前所拥有的弹药数。
  • AmmoMaxed [mode] - 返回武器的弹药数是否已经达到最大限度。
  • DesireAmmo [bDetour] - 返回为武器而清空的“clip(剪辑)”的百分比。
    • bDetour - 尚未使用。
  • NeedAmmo - 返回武器当前的弹药数是否比默认弹药数少。

Damage(伤害)

  • AdjustPlayerDamage [Damage] [InstigatedBy] [HitLocation] [Momentum] [DamageType] - 当武器的所有者在使用这个武器的情况下受到伤害时调用来调整所受到的Damage的函数存根。子类应该重载这个函数,例如,针对盾牌等等。
    • Damage - 输出。初始伤害量并输出调整后的伤害量。
    • InstigatedBy - 引用负责产生伤害的控制器。
    • HitLocation - 控制要产生伤害的位置。
    • Momentum - 输出。控制初始冲力并输出调整后的冲力。
    • DamageType - 控制所施加的伤害的伤害类型。

Display(显示)

  • ActiveRenderOverlays [H] - 在这个武器处于激活状态的时候通过InventoryMangaer调用来在HUD上描画元素,例如,十字瞄准线。
    • H - 引用可以提供访问用于描画的当前Canvas的权限的HUD。
  • DrawWeaponCrosshair [HUD] - 在HUD上描画这个武器的十字瞄准线。通过ActiveRenderOverlays()进行调用。
    • HUD - 引用可以提供访问用于描画的当前Canvas的权限的HUD。
  • DrawLockedOn [H] - 当武器有目标锁定时加上已锁定符号。
    • H - 引用可以提供访问用于描画的当前Canvas的权限的HUD。
  • ShakeView - 当开火射击的时候在所拥有的客户端上播放一个视图晃动相机动画。
  • WeaponCalcCamera [fDeltaTime] [out_CamLoc] [out_CamRot] - 允许武器调整所有者的相机的存根函数。子类需要重载这个类。
    • fDeltaTime - 自从上一帧开始过去的时间。
    • out_CamLoc - 当前相机位置并输出调整后的位置。
    • out_CamRot - 当前相机旋转量并输出调整后的旋转量。
  • CoversScreenSpace [ScreenLoc] [Canvas] - 返回武器是否会重载给定的屏幕位置。
    • ScreenLoc - 返回要检查的屏幕上的位置。
    • Canvas - 引用当前Canvas。
  • DrawKillIcon [Canvas] [ScreenX] [ScreenY] [HUDScaleX] [HUDScaleY] - 静态。当武器杀死了一些怪物时在HUD上绘制武器的图标。
    • Canvas - 引用当前Canvas以进行描画。
    • ScreenX - 要进行描画的X坐标。
    • ScreenY - 要进行描画的Y坐标。
    • HUDScaleX - HUD的水平缩放(相对于1024)。
    • HUDScaleY - HUD的垂直缩放(相对于768)。
  • EnableFriendlyWarningCrosshair - 返回武器是否会显示一个用户友好的警告瞄准线。通常返回true。子类应该重载这个函数更改操作方式,例如,对于那些可以在用户友好的界面上射击或者使用的武器。

Effects(特效)

  • MuzzleFlashTimer - 在枪口火焰计时器已经过去的时候取消激活枪口火焰粒子系统。
  • CauseMuzzleFlash - 激活枪口火焰粒子系统并设置计时器来取消激活它。
  • CauseMuzzleFlashLight - 转动枪口火焰光。
  • StopMuzzleFlash - 清除枪口火焰计时器并取消激活枪口火焰粒子系统。
  • SetMuzzleFlashparams [PSC] - 在枪口火焰粒子系统上设置任何自定义参数。
    • PSC - 引用枪口火焰粒子系统组件。
  • AttachMuzzleFlash - 创建并附加枪口火焰组件。在附加武器的时候调用。
  • DetachMuzzleFlash - 移除并拆除枪口火焰组件。在拆除武器的时候调用。
  • GetEffectLocation - 返回开始生成开火特效的位置,例如示踪器。

开火及计时

  • bReadyToFire - 返回武器是否已经准备好开火。
  • ClientEndFire [FireModeNum] - 在客户端上调用啦停止以给定开火模式开火。
    • FireModeNum - 要停止开火的开火模式。
  • GetPowerPerc - 返回武器当前的力量百分比(从0.0到1.0的数值)。通常返回0.0。子类应该重载这个函数更改操作方式,例如,对于那些蓄力或补充能量并在松开按钮时开火的武器。
  • IsFullyCharged - 返回武器是否已经蓄满力,例如,从控制开火按钮玩家或AI那里蓄力。

武器库

  • CalcInventoryWeight - 计算武器的唯一武器库权重用于武器转换。
  • ShouldSwitchTo [InWeapon] - 返回武器的优先级是否低于给定武器。
    • InWeapon - 引用要检查的武器。
  • GetEquipTime - 返回装配武器所需要的时间。
  • PerformWeaponChange - 在拥有武器的Pawn更改武器的时候进行调用。
  • ServerReselectWeapon - 当玩家重现选择当前处于激活状态的武器的时候在服务器上调用的函数存根。
  • AllowSwitchTo [NewWeapon] - 返回是否允许所有者从这个武器转换到给定武器。通常返回true。子类应该重载这个函数更改操作方式。
    • NewWeapon - 引用要转换到的新武器。
  • DetourWeight [Other] [PathWeight] - 返回武器作为具有给定路径权重的给定Pawn的拾取的可取之处。
    • Other - 引用要检查Pawn (AI)。
    • PathWeight - 从Pawn到武器拾取的路径权重。

网格物体和动画

  • CreateOverlayMesh - 尝试为重载网格物体设置组件。
  • SetSkin [NewMaterial] - 将新材质应用到武器网格物体。如果新材质为空,那么清除该材质。
    • NewMaterial - 引用要使用的新材质。
  • PlayArmAnimation [Sequence] [fDesiredDuration] [OffHand] [bLoop] [SkelMesh] -
  • PlayWeaponPutDown - 为收起武器播放动画。
  • PlayWeaponEquip - 为装配武器播放动画。
  • ChangeVisibility [bIsVisible] - 在武器的可见性应该更改并相应地设置可见性的时候通过拥有武器的Pawn调用。
    • bIsVisible - 如果该选项为true,那么将武器设置为可见。否则,将武器设置为不可见。
  • PreloadTextures [bForcePreload] - 为了在装配武器之前动态载入MIPS,强制加载动态贴图。
    • bForcePreload - 如果该选项为true,那么动态加入贴图。否则,清除强制加载。
  • SetupArmsAnim - 使用动画设置手臂网格物体,前提是指定一个AnimSet。否则,隐藏手臂网格物体。
  • GetHand - 返回当前所有者应该用来控制武器的手。

Sounds(声效)

  • PlayFiringSound - 为当前开火模式播放武器开火声音。

附加物


当以第三人称或者其他任何看不到玩家的网格物体的视角看玩家的时候,武器会在视觉方面使用完全不同的属性设置。这是通过使用 Attachment 类完成。每个武器都有一个附加物类,它可以控制对第三人称网格物体引用、该网格物体的动画、枪口火焰和其他特效以及很多只能在以除第一人称以外的任何视角观看武器的时候使用的其他属性。所有只要开火或进行使用的武器函数的工作方式的属性都保持原样,并且都取自主要武器类。这样,您就可以让第三人称武器的所有视觉效果内包含在它们自己的类中,而不需要复制那些彼此相同的属性。

attachment.jpg

UTWeaponAttachment属性

这些是以第三人称观察的时候武器的视觉效果方面的属性。

Effects(特效)

  • SplashEffect - 在通过这个 武器射击击中水量的时候生成的actor。
  • bMakeSplash - 如果该选项为true,那么为本地玩家显示飞溅效果。
  • MuzzleFlashSocket - 在为这个武器附加枪口火焰效果的时候要使用的插槽的名称。
  • MuzzleFlashPSC - 枪口火焰效果的粒子系统组件。
  • MuzzleFlashPSCTemplate - 要在主要开火模式中作为枪口火焰使用的ParticleSystem(粒子系统)。
  • MuzzleFlashAltPSCTemplate - 要在alt开火模式中作为枪口火焰效果使用的ParticleSystem(粒子系统)。
  • MuzzleFlashColor - 要传递到枪口火焰ParticleSystem中的'MuzzleFlashColor'参数的颜色,在这个ParticleSystem存在的情况下。
  • bMuzzleFlashPSCLoops - 如果该选项为true,那么将会允许这个枪口火焰效果循环播放而不是处于非激活状态。它可以用于快速开火武器,例如,小机枪。
  • MuzzleFlashLight - 在武器开火的时候闪耀的光。
  • MuzzleFlashLightClass - 用于枪口火焰光的类。
  • MuzzleFlashDuration - 枪口火焰持续的时间。
  • MaxFireEffectDistance - 要显示枪口火焰特效,相机需距离武器附加物的最大距离。
  • ImpactEffects - 要用于在主要开火模式中与各种不同类型的表面撞击的材质撞击效果。
  • AltImpactEffects - 要用于在alt开火模式中与各种不同类型的表面撞击的材质撞击效果。
  • DefaultImpactEffect - 用于在主要开火模式中与没有匹配的材质专用效果的表面撞击的默认材质撞击效果。
  • DefaultAltImpactEffect - 用于在alt开火模式中与没有匹配的材质专用效果的表面撞击的默认材质撞击效果。
  • MaxImpactEffectDistance - 要显示撞击效果,相机需距离武器中的撞击的最大距离。
  • bAlignToSurfaceNormal - 如果该选项为true,为这个武器显示的撞击效果将会根据被击中的表面进行调整。可以将它应用于使用贴花的撞击效果。

开火及计时

  • WeaponClass - 使用该附加物的武器类。

网格物体和动画

  • Mesh - 设置用于武器的网格物体(在这里不限制类型,但是虚幻会都当成是骨架网格物体)。这是第一人称网格物体。
  • OverlayMesh - 将网格物体设置为用于叠加效果。
  • FireAnim - 在使用主要开火模式开火的时候在武器上播放的动画。
  • AltFireAnim - 在使用alt开火模式开火的时候在武器上播放的动画。
  • WeaponAnimType - 供该武器使用的动画类型。用于确定在Animtree中瞄准节点对使用这个武器的Pawn所使用的分布图。
    • EWAT_Default - 让武器使用 'Default' 瞄准分布图。
    • EWAT_Pistol - 让武器使用 'SinglePistol' 瞄准分布图。
    • EWAT_DualPistols - 让武器使用 'DualPistols' 瞄准分布图。
    • EWAT_ShoulderRocket - 让武器使用 'ShoulderRocket' 瞄准分布图。
    • EWAT_Stinger - 让武器使用 'Stinger' 瞄准分布图。
  • DistFactorForRefPose - 武器网格物体在仍然会播放有关武器的动画的屏幕空间中的最小尺寸。如果网格物体比这个最小值小,那么将会禁用动画来进行优化。

Sounds(声效)

  • BulletWhip - 由武器的“bullets(子弹)”射击而产生的声音。
  • bSuppressSounds - 如果该选项为true,不会播放武器产生的声音。

UTWeaponAttachment函数

这些函数对于UTWeaponAttachment类来说是唯一的。这个类中的很多函数在其他武器类中都有对应的函数。您可以在其他章节中找到有关它们的说明。

Effects(特效)

  • FirstPersonFireEffects [PawnWeapon] [HitLocation] - 播放任何需要的第一人称视角开火特效(枪口火焰等等)。
    • PawnWeapon - 引用要播放特效的武器。
    • HitLocation - 控制要播放特效的位置。
  • StopFirstPersonFireEffects [PawnWeapon] - 停止任何正在播放的第一人称开火特效。
    • PawnWeapon - 引用要停止特效的武器。
  • ThirdPersonFireEffects [HitLocation] - 播放任何第三人称视角开火特效(枪口特效、动画等等);
    • HitLocation - 控制要播放特效的位置。
  • StopThirdPersonFireEffects - 停止任何正在播放的第三人称开火特效。
  • GetImpactEffect [HitMaterial] - 返回要用于在给定物理材质上撞击的材质冲力。
    • HitMaterial - 控制射中的物理材质。
  • AllowImpactEffects [HitActor] [HitLocation] [HitNormal] - 返回击中给定actor后是否应该生成撞击效果。
    • HitActor - 引用被击中的Actor。
    • HitLocation - 控制撞击的位置。
    • HitNormal - 控制撞击时的表面法线。
  • SetImpactedActor [HitActor] [HitLocation] [HitNormal] [HitInfo] - 用于设置被枪撞击的actor的函数存根。子类需要重载这个类。
    • HitActor - 引用被击中的Actor。
    • HitLocation - 控制撞击位置。
    • HitNormal - 控制撞击时的表面法线。
    • HitInfo - 控制与撞击相关的TraceHitInfo结构体。
  • PlayImpactEffects [HitLocation] - 生成任何应该在撞击时产生的效果。
    • HitLocation - 撞击的位置。

Sounds(声效)

  • CheckBulletWhip [FireDir] [HitLocation] - 检查bullet whips (子弹从玩家的头上飞过)并根据情况显示相应的声音。
    • FireDir - “bullet(子弹)”飞行的方向。
    • HitLocation - 撞击的位置。

射弹


射弹是由使用射弹开火模式的武器发射的物理物体。武器只会生成一个射弹并通知它应该向哪个方向开火。其余过程完全由射弹决定。这些射弹会计算它们自己的移动,通常是根据物理方法计算,然后使用碰撞事件确定所击中的东西以及如何对击中的Actor应用伤害或其他效果。

射弹属性

这些属性可以在基础射弹类中找到。它们是所有射弹共有的,而且实际上是通用的。

Collision(碰撞)

  • bSwitchToZeroCollision - 如果该选项为true,同时射弹有非零碰撞面积,那么在射弹通过使用bBlockNonZeroExtents=False击中一个actor的情况下,射弹会转换为零碰撞面积。
  • ZeroCollider - 控制对被击中会使碰撞面积变为零的Actor的引用。
  • ZeroColliderComponent - 控制对被击中会使碰撞面积变为零的Actor的组件的引用。
  • bBlockedByInstigator - 如果该选项为true,射弹的发起者将会与射弹碰撞。
  • CylinderComponent - 射弹的碰撞组件。

Damage(伤害)

  • Damage - 由射弹对它击中的Actor(s)所造成的伤害。
  • DamageRadius - 射弹应该对这个撞击地点造成的溅射伤害的半径。
  • MomemtumTransfer - 射弹对它所伤害的Actor(s)施加的冲力。
  • MyDamageType - 用于施加由射弹造成的伤害的伤害类。
  • InstigatorController - 控制对射弹的发起者的控制器的引用。
  • ImpactedActor - 控制对被射弹撞击的Actor的引用。该Actor通常会受到所应用的全部伤害,即使射弹进行半径伤害并且该Actor会被HurtRadius()函数忽略。

Movement(运动)

  • Speed - 射弹在开火时的初始速度。
  • MaxSpeed - 射弹可以达到的最大速度。值为0意味着没有限制。
  • bRotationFollowsVelocity - 如果该选项为true,射弹的旋转量在每一帧都会进行更新,这样它通常会指向它移动的方向。
  • NetCullDistanceSquared - 射弹可以远离相机同时在客户端上仍然被视作相关联的最大距离。

Sounds(声效)

  • SpawnSound - 在生成射弹(或者就像之前一样发射射弹)的时候播放的SoundCue。
  • ImpactSound - 在射弹击中世界中的某些东西时播放的SoundCue。

射弹函数

Collision(碰撞)

  • Touch [Other] [OtherComp] [HitLocation] [HitNormal] - 由Actor继承而来。在射弹与某些东西碰撞的时候会执行这个函数。
    • Other - 引用与射弹发生碰撞的Actor。
    • OtherComp - 引用与射弹发生碰撞的Actor的组件。
    • HitLocation - 控制碰撞发生的位置。
    • HitNormal - 控制碰撞发生的表面法线。
  • ProcessTouch [Other] [HitLocation] [HitNormal] - 在射弹与发起者之外的任何物体发生碰撞的情况下,处理使射弹爆炸的接触事件(通过调用Explode()函数)。
    • Other - 引用与射弹发生碰撞的Actor。
    • HitLocation - 碰撞发生的位置。
    • HitNormal - 碰撞发生的表面法线。
  • HitWall [HitNormal] [Wall] [WallComp] - 由Actor继承而来。在射弹击中一面墙的时候执行这个函数。默认情况下,对撞击的墙(如果不是静态的情况)应用伤害并会使射弹爆炸(通过使用Explode()函数)。
    • HitNormal - 碰撞发生的表面法线。
    • Wall - 引用会与射弹发生碰撞的墙Actor,如果墙是一个Actor。
    • WallComponent - 引用与射弹发生碰撞的组件。
  • Explode [HitLocation] [HitNormal] - 应用半径伤害(通过使用ProjectileHurtRadius()函数)并毁坏射弹(通过使用Destroy()函数)。
    • HitLocation - 会促使爆炸发生的碰撞所在的位置。
    • HitNormal - 会促使爆炸发生的碰撞所在的表面法线。

伤害与撞击

  • ProjectileHurtRadius [HurtOrigin] [HitNormal] - 将撞击位置调高来躲开世界几何体,这样更多对附近的Actor进行的跟踪将会成功,然后通过新的撞击位置调用HurtRadius()。
    • HurtOrigin - 射弹撞击的位置。
    • HitNormal - 在射弹撞击的位置的表面法线。
  • HurtRadius [DamageAmount] [inDamageRadius] [DamageType] [Momentum] [HurtOrigin] [IgnoredActor] [InstigatorController] [bDoFullDamage] - 对指定半径范围内的所有actor产生的伤害。对ImpactedActor应用完全伤害,然后调用传递ImpactedActor作为IgnoredActor的父代类的HurtRadius()函数。
    • DamageAmount - 在应用完全伤害的时候要进行的伤害量。
    • InDamageRadius - Actor将会应用伤害的半径范围。
    • DamageType - 要在伤害过程中使用的伤害类型。
    • Momentum - 要在应用伤害的时候在actor上施加的冲力。
    • HurtOrigin - 要应用半径伤害的起点。
    • IgnoredActor - 可选项。被射弹撞击的Actor。应用了完全伤害。
    • InstigatorController - 可选项。如果存在一个这样的选项,那么指的就是射弹的发起者的控制器。
    • bDoFullDamage - 可选项。如果该选项为true,那么会对这个半径范围内的所有Actor应用完全伤害。否则,会减轻半径范围内的伤害。
  • ApplyFluidSurfaceImpact [Fluid] [HitLocation] - 由Actor继承而来。调用父代类的ApplyFluidSurfaceImpact()函数并播放流体表面actor的ProjectileEntryEffect粒子特效。
    • Fluid - 引用被击中的流体表面actor。
    • HitLocation - 控制射弹与流体表面actor发生碰撞的位置。

Movement(运动)

  • Init [Direction] - 通过设置射弹的旋转量和速度来对它进行初始化。
    • Direction - 射弹发射的方向。用于设置旋转量,然后与速率相乘来设置速度。
  • RandSpin [SpinRate] - 使用随机值填充射弹的旋转率(Pitch(倾斜)、Yaw(偏移)和Roll(翻转))的分量。
    • SpinRate - 任何分量的随机率将会达到的最大(正数或负数)数值。
  • GetTimeToLocation [TargetLoc] - 返回射弹以当前速率到达特定位置所需的时间。
    • TargetLoc - 控制目标位置。
  • StaticGetTimeToLocation [TargetLoc] [StartLoc] [RequestedBy] - GetTimeToLocation()的静态版本,它将会返回射弹以默认速率从一个位置到另一个位置所需的时间。
    • TargetLoc - 控制目标位置。
    • StartLoc - 控制开始位置。
    • RequestedBy - 引用调用了这个函数的控制器。
  • GetRange - 返回射弹在它的生命周期中飞行的最大距离。

UTProjectile属性

Effects(特效)

  • ProjEffects - 在飞行的时候播放的粒子系统组件。
  • ProjFlightTemplate - 用于形象地表现这个射弹的粒子系统。
  • ProjExplosionTemplate - 在射弹爆炸的时候播放的粒子系统。
  • bAdvancedExplosionEffect - 如果该选项为true,将会沿着子弹飞行的方向传递ProjExplosionTemplate射弹系统,并在分别撞击 'Velocity' 和 'HitNormal' 参数的时候击中射弹的法线。在设置这个属性的时候,请确保使用这些参数设置了爆炸粒子系统。
  • MaxEffectDistance - 要显示爆炸效果,撞击可以距离相机的最大距离。
  • ExplosionDecal - 要应用于射弹爆炸时射弹撞击的表面的贴花。
  • DecalWidth - 爆炸贴花的宽度。
  • DecalHeight - 爆炸贴花的高度。
  • DurationOfDecal - 在爆炸消失之前爆炸贴花应该在表面上显示的时间。
  • DecalDissolveParamName - 贴花材质中用于使贴花慢慢消失的参数的名称。
  • bSurppressExplosionFX - 如果该选项为true,那么在射弹被毁坏的时候不会显示爆炸效果。可以在通过LimitationVolumes或者以其他方式(毁坏不应该显示爆炸效果)毁坏射弹的时候使用。
  • bWaitForEffects - 如果该选项为true,那么射弹会保持起作用状态,但是是隐藏的,直到飞行效果完成为止。
  • bAttachExplosionToVehicles - 如果该选项为true,如果射弹撞击了一辆载具,那么将会为撞击的载具附加爆炸效果。
  • ProjectileLight - 射弹的光分量。只有在本地玩家发射射弹的时候才会生成这个属性。
  • ProjectileLightClass - 射弹的光的类。
  • ExplosionLightClass - 在射弹爆炸的时候使用的光的类。
  • MaxExplosionLightDistance - 要显示爆炸光,撞击可以距离相机的最大距离。

Sounds(声效)

  • bSuppressSounds - 如果该选项为true,那么将会在射弹上禁用声效。
  • AmbientSound - 当射弹在飞行过程中循环播放的SoundCue。
  • ExplosionSound - 当射弹爆炸时播放的SoundCue。
  • bImportantAmbientSound - 如果该选项为true,由于性能原因将会被永远切掉的射弹环境声效。

UTProjectile函数

Collision(碰撞)

  • Landed [HitNormal] [FloorActor] - 由Actor继承而来。在射弹与地板或地面碰撞的时候执行这个函数。
    • HitNormal - 控制射弹与地板碰撞的表面法线。
    • FloorActor - 引用与射弹发生碰撞的Actor。
  • Destroyed - 由Actor继承而来。在毁坏射弹的时候执行这个函数。默认情况下,调用 SpawnExplosionEffects() 生成爆炸事件并清除飞行效果。

Effects(特效)

  • SpawnFlightEffects - 生成并设置在射弹飞行过程中使用的特效。
  • SpawnExplosionEffects [HitLocation] [HitNormal] - 生成并设置在射弹爆炸的时候爆炸特效、贴花和光。
    • HitLocation - 会使射弹爆炸的撞击的位置。
    • HitNormal - 会使射弹爆炸的撞击所处表面法线。
  • SetExplosionEffectParameters [ProjExplosion] - 子类用来设置爆炸粒子系统上的其他参数的函数存根,如果需要。由SpawnExplosionEffects()函数调用。
    • ProjExplosion - 引用爆炸效果粒子系统组件。
  • ShouldSpawnExplosionLight [HitLocation] [HitNormal] - 返回决定是否应该根据爆炸的位置生成爆炸光的布尔值。
    • HitLocation - 控制爆炸的位置。
    • HitNormal - 控制爆炸所处的表面法线。
  • MyOnParticleSystemFinished [PSC] - 由飞行粒子系统组件完成的时候进行调用。在 bWaitForEffects 为true的时候使用,可以清除飞行特效。
    • PSC - 引用调用该函数的粒子系统组件。
  • Shutdown - 清除所有特效,关闭物理并毁坏射弹。

Movement(运动)

  • CalculateTravelTime [Dist] [MoveSpeed] [MaxMoveSpeed] [AccelMag] - 返回射弹通过使用给定的运动属性飞行特定距离所需要的时间的静态函数。由GetTimeToLocation()和StaticGetTimeToLocation()进行调用。
    • Dist - 控制飞行的距离。
    • MoveSpeed - 控制射弹的起始速度。
    • MaxMoveSpeed - 控制射弹的最大速度。
    • AccelMag - 控制射弹的加速度。

拾取物


拾取物是放置在整个世界中的物品,当玩家在世界中跑动的时候,系统为其提供的一些与武器库种类相关的物品。就武器系统而言,您应该了解一些拾取物的类型。Weapon Factories、Weapon Lockers及Ammo Factories。

Weapon Factory(武器工厂)

武器工厂是一个可以为玩家提供一个单独的武器特定类型的拾取物。它唯一的任务是在玩家到处跑动的时候将该类型的武器默认弹药量放到玩家的武器库中。虽然每种武器没有自己的工厂。用来通知工厂要将哪种类型的武器授予玩家与设计师可配置属性结合使用的单个类。

weaponfactory.jpg

Weapon Locker(武器寄物柜)

武器寄物柜是一种可以同时为玩家提供几种不同类型的武器的拾取物。寄物柜可以提供的武器类型由设计师在将武器寄物柜放置在世界中时在一个数列中进行设置。每种武器都有一种针对在从寄物柜中获得武器的时候使用的武器寄物柜的默认弹药数。

weaponlocker.jpg

Ammo Factory(弹药工厂)

弹药工厂是一种只会为玩家提供特定的弹药类型的弹药工厂。弹药工厂有一种可以提供弹药的武器特定类型,而玩家在武器库中必须有这种类型的武器才能使用这种类型的拾取物。每种类型的武器应该有属于它自己的弹药工厂类。

ammofactory.jpg