UDN
Search public documentation:

UDKCustomCharactersCH
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主页 > 游戏性元素 > 为 UDK 创建自定义角色
UE3主页 > 骨架网格物体 > 为 UDK 创建自定义角色

为 UDK 创建自定义角色


概述


该文档会讨论创建新角色网格物体,放在虚幻开发工具套装中使用,以及引擎中的网格物体内容的重要性,并对其进行配置使它在引擎中快速站立和跑动。要了解有关角色的自定义行为编程方面的更多信息,请参阅角色技术指南

骨架


下面是 4 个不同的骨架,可以作为构建您自己的角色使其可以在 UDK 中使用的指南和基础:

注意: 有些骨架中包含 Biped 骨架。该 Biped 骨架只是易于进行动画处理的额外骨架。动画完成后,我们会将动画烘焙到初始骨架上,删除这个两足动物骨架,导出动画。

此外,提供以下第一人称骨架作为参考。

符合标准的工作流程是使用可以被称为“靠模骨架”文件,它应该包含您的游戏中每个此类角色使用的所有骨骼。角色网格物体没必要使用所有骨骼;不过,靠模骨架的每个角色都必须有每个骨骼。例如,如果有人想要创建一个配备还不存在的新的布类型的角色,如布悬挂在每个角色腰间,需要将那些骨骼添加到靠模骨架,这样每个网格物体才会在角色创建过程中正常工作。

由于靠模骨架内含有存在的每一个骨骼,所以将靠模骨架 max 文件用于植皮新的网格物体是一个不错的主意,这样可以很容易看到所有可供使用的骨骼。

简便起见,为了可以在 UDK 中使用现有动画集,该文档将回顾使用已经存在的骨骼导入角色。

Mesh(网格物体)加权为 Skeleton(骨架)

创建一个自定义网格物体时,最好是根据心里构想的骨架雏形创建网格物体。网格物体应该根据所有与骨架已经定义的位置相对应的关节建立模型。对于不遵守这个规则的网格物体,可以旋转骨架关节,使它们可以满足网格物体中关节的要求。游戏中的动画会将骨骼调整恢复到它们需要放置的地方,这样才能正常播放。虽然可以旋转骨骼,但是决不应该平移或挪动它们,尝试将它们放置在网格物体中关节所在位置。因为动画会定义骨骼平移的位置,所以这样做会在游戏中造成意想不到的结果,还会挤压或拉伸网格物体。例如,如果一个网格物体的腿比骨架定义的长度短,然后移动骨架的腿骨骼来补足短的那部分,那么在游戏中为了与其他角色的腿的长度相一致会将腿拉伸得更长。这样可以保证在游戏中角色设置过程中的所有部分连接正确。组装网格物体的正确方法是,根据需要旋转关节使它们在必要的时候尽量闭合和/或修改网格物体进行组装。使用不同比例创建角色将需要一个新的靠模骨架,而且如果该比例与已经存在的角色差距很大,它们可能还需要拥有它们自己的动画,这些已经超出了本文档的范围。

以下面的网格物体为例。已经使用心里构想的男性骨架对其进行建模。所有主要的关节和身体部分都完全满足骨架的要求,所以不需要进行大量调节。到了对网格物体加权使其成为骨架的时候,就会异常简单。

在 UT3_Male.max 文件中合并骨骼,删除不需要的骨骼,然后对网格加权使其成为骨架。在本案例中,网格物体没有额外部分或可能会需要额外骨骼的‘飞扬的碎片’,所以骨架上只剩下下光秃秃的必需部分可以进行加权。

Male_Bones.jpg

导出步骤


接下来是导出您的角色并将其导入引擎。从 3D 应用程序导出骨架网格物体,您可以使用内置到应用程序中的 FBX 导出器。然后按照有关使用FBX文件格式将您的网格物体导入到骨架网格物体的指南进行操作。

导入步骤


打开虚幻编辑器,然后打开内容浏览器。接下来按照有关使用FBX文件格式导入骨架网格物体的指南进行操作。

只要网格物体导入成功,请将这个包保存在以下目录中:

[YourUDKInstallationDirectory]\UDKGame\Content\Characters

向网格物体添加 Sockets(插槽)


插槽是骨架网格物体上的用户定义点。可以将它们添加到任何骨架网格物体;而且在 UDK 中,它们可用于许多地方,包括开始发射粒子的点或装备武器的地方。为了您的角色在游戏中可以正常活动,需要向每个网格物体添加这些点。要添加插槽,请双击那些内容浏览窗口中您想要添加点的网格物体。会出现骨架网格物体/动画集合编辑器(AnimSet Editor(动画集合编辑器))窗口。点击 Socket Manager(插槽管理器)图标,或从 Mesh(网格物体)菜单中选择 Socket Manager(插槽编辑器)弹出 Socket Manager(插槽管理)窗口。

SocketManager.jpg

通过选择 New Socket(新建插槽)创建的 Sockets,选择会装备该插槽的骨骼,然后为插槽创建一个名称。

为了使自定义角色可以使用当前代码库,UDK 随附的 UTGame 角色具有所需的特定插槽。如果您希望可以放弃您自己的角色并使它们在没有任何额外编码的情况下正常运行,那么您的网格物体至少需要具有以下插槽:

插槽名称 骨骼名称
WeaponPoint b_RightWeapon
DualWeaponPoint b_LeftWeapon
L_JB b_LeftAnkle
R_JB b_RightAnkle
HeadShotGoreSocket b_Neck

角色的脚或战靴需要两个插槽才能在使用跳动的战靴时为粒子提供发射起源地。它们的插槽名称分别为,左边的脚是 L_JB,而右边的脚是 R_JB。例如,要添加 L_JB 插槽,请选择 New Socket(新建插槽),选择骨骼 b_LeftAnkle,然后是插槽名称类型 L_JB。

可以平移和旋转插槽,这样可以将其放置在对于网格物体来说相对正确的地方。当创建的时候,这些插槽看上去在脚踝骨骼开始的地方;但是粒子需要从脚的底部开始发射。在 Socket Manager(插槽管理)窗口中,前面两个图标是平移插槽和旋转插槽。打开平移插槽,将插槽移动到脚的底部。此外,有些插槽可能需要旋转,才能确保这些粒子会发射方向正确或这些对象与正确的方位连接。您可以打开该游戏附带的其他骨架网格物体上的 Socket Manager(插槽管理)窗口,了解这些插槽应该如何放置及其放置地点。

SocketTransform.jpg

这里可以找到更多有关插槽的信息。

从现有 UDK 角色中快速复制插槽

如果您将您的骨架网格物体中同一个骨架绑定作为存储在包中中的其他现有骨架网格物体使用,您可以快速复制插槽,不需要重新创建它们。例如,打开存储为 CH_LIAM_Cathode.Mesh.SK_CH_LIAM_Cathode 的骨架网格物体。打开 Socket Manager(插槽管理器),然后点击 Copy Sockets(复制插槽)按钮。

CopySockets.jpg

接下来打开您的骨架网格物体。打开 Socket Manager(插槽管理器),然后点击 Paste Sockets(粘贴插槽),这样就完成了操作!

PasteSockets.jpg

创建您的角色供游戏中使用


最后一步是配置 UDK,使您的新角色可以使用。该过程将需要专心研究UnrealScript(虚幻脚本),才可以创建一个新类, UTFamilyInfo 的子类,而且可以修改一个现有的类 UTPlayerReplicationInfo 。当然,为了在 UDK 中创建一个完整的自定义可进行游戏的角色,我们要做的事情很多很多,但是其中很多都已经超出本文档的范围。我们只会将重点集中在使您的角色站起来并跑动的光秃秃的必需部分。

UTFamilyInfo 子类

UTFamilyInfo 类基本上是一个属性的容器,它允许您指定用于粒子角色或角色的群组的网格物体、物理资源、动画集、材质、血肉快等等。不过,这个类确实还包含一些其他功能,由于该文档的原因,可以简单地将其看作是设置某些属性的地方,设置好这些属性才可以将您的角色放入 UDK 中。

在本示例中,我们将会一直创建一个单独的子类并只将其用于一个角色。理论上,您可以创建这些类的层次结构,其中一个类是由 UTFamilyInfo 而来的子类并会定义所有共享共同属性的角色群组的基本属性。例如,从他们的外观角度而言,一个角色群组可能共享一个共同的主题。可以认为这些角色是相同派系的一部分。然后您可以创建这个新类的多个子类。每个子类可以代表这个派系中的特定角色,而且它们甚至会指定他们在该派系中所属的家族,进一步对您的角色进行分类。

在进行下一步操作之前,您首先需要为您的角色创建一个该类的新子类。

UTFamilyInfo_SpaceMarine.uc
Class UTFamilyInfo_SpaceMarine extends UTFamilyInfo
   abstract;

defaultproperties
{
}

现在,在这个类的默认属性块中,您可以设置或覆盖属性来创建您的角色。在您的新 UTFamilyInfo 类中最重要的属性是 CharacterMesh(角色网格物体) 属性。正如您可能已经猜到的一样,该属性应该引用您之前导入的骨架网格物体。作为我们的示例,它将会是:

CharacterMesh=SkeletalMesh'UDNCharacters.SpaceMarine'

您应该继续直到完成,并继续将属性设置为您自己的自定义资源的点。下面描述的一些重要的属性:

  • Faction – 这个角色或角色的群组所属的整个群组的名称。
  • FamilyID – 这个角色所属的家族的名称。
  • CharacterTeamBodyMaterials – 这是作为团队游戏中角色的身体材质使用的材质的数组。0 索引代表红色,1 索引代表蓝色。
  • CharacterTeamHeadMaterials - 这是作为团队游戏中角色的头材质使用的材质的数组。0 索引代表红色,1 索引代表蓝色。
  • PhysicsAsset – 这是对为您的角色骨架网格物体创建的物理资源的引用。
  • AnimSets – 这是供您的角色使用的动画集的数组。
  • ArmMeshPackageName – 包含该角色第一人称装备网格物体的包的名称。
  • ArmMesh – 这是对该角色的第一人称手臂的引用
  • ArmSkinPackageName – 包含第一人称手臂网格物体的材质的包的名称。
  • RedArmMaterial – 这是对第一人称手臂网格物体的红色团队材质的引用。
  • BlueArmMaterial - 这是对第一人称手臂网格物体的蓝色团队材质的引用。

当然,您可能想要设置的更多属性,而且它们全部可以在 UTFamilyInfo.uc 脚本中找到,大多数附有描述性评论。

只要您为您的角色设置了这些属性,那么请将其保存到以下目录中:

[YourUDKInstallationDirectory]/Development/Src/UTGame/Classes

UTPlayerReplicationInfo 类

现在,您需要告诉 UDK 使用该新类而不是当前的默认类。这可以在 UTPlayerReplicationInfo.uc 文件的默认属性块中进行设置。最后一行目前应该这样写:

CharClassInfo=class'UTGame.UTFamilyInfo_Liandri_Male'

您只需修改类使其指向您新创建的 UTFamilyInfo 类。在该示例中,现在这行代码将会如下所示:

CharClassInfo=class'UTGame.UTFamilyInfo_SpaceMarine'

保存 UTPlayerReplicationInfo.uc 脚本,然后重新构建该脚本。如果顺利的话,您将不会遇到任何编译器错误,而且您可以在游戏中测试您的新角色。

character.jpg