在开始修改武器发射物之前,先来了解一下 武器类的一部分引用结构;
例如武器 AA12 自动散弹枪,在 KFMod 能找到七个 AA12 开头的类文件
-
AA12Ammo.uc 弹药
-
AA12AmmoPickup.uc 弹药拾取物
-
AA12Attachment.uc 附加物,3D枪械模型
-
AA12AutoShotgun.uc 武器类
-
AA12Bullet.uc 弹丸,打出去的子弹
-
AA12Fire.uc 开火类
-
AA12Pickup.uc 武器拾取物
这些类相互之间通过属性进行引用,但一般是以“武器类”作为入口点。
在 AA12AutoShotgun.uc 可以找到相关的引用属性
FireModeClass(0)=Class'KFMod.AA12Fire'
PickupClass=Class'KFMod.AA12Pickup'
AttachmentClass=Class'KFMod.AA12Attachment'
这只是第一层引用 并且以“武器类”为开始
第二个关键点是“开火类”主要用于设定武器的开火形式
将开火做成单独的类 是有原因的,一方面减轻了武器类的代码量;
另一方面 虚幻引擎有两种攻击方式,会涉及到不同的处理方式
-
InstantFire:瞬间开发,例如:AK、小刀的攻击方式,瞬间计算击中
-
BaseProjectileFire:发射物开火,例如:散弹枪、火箭弹 等发射物攻击
InstantFire 和 BaseProjectileFire 代表了两种攻击方式的基类,
而 KF1 在这两个类的基础上开发了常用的 KFFire 和 KFShotgunFire
在 KF1 中几乎所有的“发射物”都继承自 KFShotgunFire 类,其余枪械的“直接攻击”都继承自 KFFire 类
接下来要让我们的“自定义M4”打出会飞的发射物。
由于目前是入门阶段 我们暂时不会去新建自己的开火类,而是简单的做引用
以下代码将“自定义M4”引用成AA12的开火类
// 自定义M4
class ABC_M4AssaultRifle extends M4AssaultRifle;
defaultproperties
{
MagCapacity=90
// 引用:开火类
FireModeClass(0)=Class'KFMod.AA12Fire'
}
由于上一次写网络同步时 删掉了一些代码,我们需要再将“给玩家发武器”的代码写到插件类中;
代码片段如下,请放到 Mutator“插件类”中
function ModifyPlayer(Pawn Player)
{
Super.ModifyPlayer(Player);
Player.GiveWeapon("ABCMutator.ABC_M4AssaultRifle");
}
编译代码,启动插件进行游戏 玩家出生时自带“自定义M4”可以打出AA12子弹
简单的一个属性修改就将 AA12 子弹应用到自定义武器上,但是目前并没有对发射物本身进行修改;
暂时只用了解一个概念,即:类之间 是用属性来引用的。