UDN
Search public documentation:
DevelopmentKitGemsCreatingAModularPawnCH
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
日本語訳
한국어
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
如何创建模块化 pawn
于 2011 年 6 月对 UDK 进行最后测试
可以与 PC 和 iOS 兼容
概述
方法
- 根据 actor 的多骨架网格物体组件 - 这种方法灵活性最好,因为它可以对这个骨架网格物体运行时间更改。然而,这种方法可能会影响性能,因为每个骨架网格物体 actor 都会成为另一个绘制调用。
- 合成网格物体 (只适用于授权用户) - 这种方法可以合成网格物体,使用多个网格物体生成一个单独的网格物体。这种方法将不会在这篇说明文章中进行说明。
相关主题
编写模块化 pawn 脚本
class ModularPawn extends UTPawn
Placeable;
// 表示头部的骨架网格物体。父代骨架网格物体组件。
var(ModularPawn) const SkeletalMeshComponent HeadSkeletalMesh;
// 表示人体躯干的骨架网格物体。头部骨架网格物体组件的子代。
var(ModularPawn) const SkeletalMeshComponent TorsoSkeletalMesh;
// 表示手臂的骨架网格物体。头部骨架网格物体组件的子代。
var(ModularPawn) const SkeletalMeshComponent ArmsSkeletalMesh;
// 表示大腿的骨架网格物体。头部骨架网格物体组件的子代。
var(ModularPawn) const SkeletalMeshComponent ThighsSkeletalMesh;
// 表示战靴的骨架网格物体。头部骨架网格物体组件的子代。
var(ModularPawn) const SkeletalMeshComponent BootsSkeletalMesh;
// 表示左肩垫的骨架网格物体。头部骨架网格物体组件的子代。
var(ModularPawn) const SkeletalMeshComponent LeftShoulderPadSkeletalMesh;
// 表示右肩垫的骨架网格物体。头部骨架网格物体组件的子代。
var(ModularPawn) const SkeletalMeshComponent RightShoulderPadSkeletalMesh;
defaultproperties
{
// 删除 UTPawn 的已定义骨架网格物体
Components.Remove(WPawnSkeletalMeshComponent)
// 创建动画序列
Begin Object class=AnimNodeSequence Name=AnimNodeSequence
End Object
// 创建头部骨架网格物体组件
Begin Object Class=SkeletalMeshComponent Name=HeadSkeletalMeshComponent
bCacheAnimSequenceNodes=false
AlwaysLoadOnClient=true
AlwaysLoadOnServer=true
bOwnerNoSee=true
CastShadow=true
BlockRigidBody=true
bUpdateSkelWhenNotRendered=false
bIgnoreControllersWhenNotRendered=true
bUpdateKinematicBonesFromAnimation=true
bCastDynamicShadow=true
RBChannel=RBCC_Untitled3
RBCollideWithChannels=(Untitled3=true)
LightEnvironment=MyLightEnvironment
bOverrideAttachmentOwnerVisibility=true
bAcceptsDynamicDecals=false
AnimTreeTemplate=AnimTree'CH_AnimHuman_Tree.AT_CH_Human'
bHasPhysicsAssetInstance=true
TickGroup=TG_PreAsyncWork
MinDistFactorForKinematicUpdate=0.2
bChartDistanceFactor=true
RBDominanceGroup=20
MotionBlurScale=0.0
bUseOnePassLightingOnTranslucency=true
bPerBoneMotionBlur=true
// 设置动画节点序列,以便我们可以测试这个动画。
Animations=AnimNodeSequence
End Object
HeadSkeletalMesh=HeadSkeletalMeshComponent
Components.Add(HeadSkeletalMeshComponent)
// 创建人体躯干骨架网格物体组件
Begin Object Class=SkeletalMeshComponent Name=TorsoSkeletalMeshComponent
bCacheAnimSequenceNodes=false
AlwaysLoadOnClient=true
AlwaysLoadOnServer=true
bOwnerNoSee=true
CastShadow=true
BlockRigidBody=true
bUpdateSkelWhenNotRendered=false
bIgnoreControllersWhenNotRendered=true
bUpdateKinematicBonesFromAnimation=true
bCastDynamicShadow=true
RBChannel=RBCC_Untitled3
RBCollideWithChannels=(Untitled3=true)
LightEnvironment=MyLightEnvironment
bOverrideAttachmentOwnerVisibility=true
bAcceptsDynamicDecals=false
bHasPhysicsAssetInstance=true
TickGroup=TG_PreAsyncWork
MinDistFactorForKinematicUpdate=0.2
bChartDistanceFactor=true
RBDominanceGroup=20
MotionBlurScale=0.0
bUseOnePassLightingOnTranslucency=true
bPerBoneMotionBlur=true
// 将动画组件赋给头部骨架网格物体组件。这样可以保证
// 将 pawn 作为一个骨架网格物体组件一样进行处理。
ParentAnimComponent=HeadSkeletalMeshComponent
// 将阴影父代组件赋给头部骨架网格物体组件。可以使用它加快
// 渲染这个 pawn 的阴影的速度,以防阴影发生折叠现象。
ShadowParent=HeadSkeletalMeshComponent
End Object
TorsoSkeletalMesh=TorsoSkeletalMeshComponent
Components.Add(TorsoSkeletalMeshComponent)
// 创建手臂骨架网格物体组件
Begin Object Class=SkeletalMeshComponent Name=ArmsSkeletalMeshComponent
bCacheAnimSequenceNodes=false
AlwaysLoadOnClient=true
AlwaysLoadOnServer=true
bOwnerNoSee=true
CastShadow=true
BlockRigidBody=true
bUpdateSkelWhenNotRendered=false
bIgnoreControllersWhenNotRendered=true
bUpdateKinematicBonesFromAnimation=true
bCastDynamicShadow=true
RBChannel=RBCC_Untitled3
RBCollideWithChannels=(Untitled3=true)
LightEnvironment=MyLightEnvironment
bOverrideAttachmentOwnerVisibility=true
bAcceptsDynamicDecals=false
bHasPhysicsAssetInstance=true
TickGroup=TG_PreAsyncWork
MinDistFactorForKinematicUpdate=0.2
bChartDistanceFactor=true
RBDominanceGroup=20
MotionBlurScale=0.0
bUseOnePassLightingOnTranslucency=true
bPerBoneMotionBlur=true
// 将动画组件赋给头部骨架网格物体组件。这样可以保证
// 将 pawn 作为一个骨架网格物体组件一样进行处理。
ParentAnimComponent=HeadSkeletalMeshComponent
// 将阴影父代组件赋给头部骨架网格物体组件。可以使用它加快
// 渲染这个 pawn 的阴影的速度,以防阴影发生折叠现象。
ShadowParent=HeadSkeletalMeshComponent
End Object
ArmsSkeletalMesh=ArmsSkeletalMeshComponent
Components.Add(ArmsSkeletalMeshComponent)
// 创建大腿骨架网格物体组件
Begin Object Class=SkeletalMeshComponent Name=ThighsSkeletalMeshComponent
bCacheAnimSequenceNodes=false
AlwaysLoadOnClient=true
AlwaysLoadOnServer=true
bOwnerNoSee=true
CastShadow=true
BlockRigidBody=true
bUpdateSkelWhenNotRendered=false
bIgnoreControllersWhenNotRendered=true
bUpdateKinematicBonesFromAnimation=true
bCastDynamicShadow=true
RBChannel=RBCC_Untitled3
RBCollideWithChannels=(Untitled3=true)
LightEnvironment=MyLightEnvironment
bOverrideAttachmentOwnerVisibility=true
bAcceptsDynamicDecals=false
bHasPhysicsAssetInstance=true
TickGroup=TG_PreAsyncWork
MinDistFactorForKinematicUpdate=0.2
bChartDistanceFactor=true
RBDominanceGroup=20
MotionBlurScale=0.0
bUseOnePassLightingOnTranslucency=true
bPerBoneMotionBlur=true
// 将动画组件赋给头部骨架网格物体组件。这样可以保证
// 将 pawn 作为一个骨架网格物体组件一样进行处理。
ParentAnimComponent=HeadSkeletalMeshComponent
// 将阴影父代组件赋给头部骨架网格物体组件。可以使用它加快
// 渲染这个 pawn 的阴影的速度,以防阴影发生折叠现象。
ShadowParent=HeadSkeletalMeshComponent
End Object
ThighsSkeletalMesh=ThighsSkeletalMeshComponent
Components.Add(ThighsSkeletalMeshComponent)
// 创建战靴骨架网格物体组件
Begin Object Class=SkeletalMeshComponent Name=BootsSkeletalMeshComponent
bCacheAnimSequenceNodes=false
AlwaysLoadOnClient=true
AlwaysLoadOnServer=true
bOwnerNoSee=true
CastShadow=true
BlockRigidBody=true
bUpdateSkelWhenNotRendered=false
bIgnoreControllersWhenNotRendered=true
bUpdateKinematicBonesFromAnimation=true
bCastDynamicShadow=true
RBChannel=RBCC_Untitled3
RBCollideWithChannels=(Untitled3=true)
LightEnvironment=MyLightEnvironment
bOverrideAttachmentOwnerVisibility=true
bAcceptsDynamicDecals=false
bHasPhysicsAssetInstance=true
TickGroup=TG_PreAsyncWork
MinDistFactorForKinematicUpdate=0.2
bChartDistanceFactor=true
RBDominanceGroup=20
MotionBlurScale=0.0
bUseOnePassLightingOnTranslucency=true
bPerBoneMotionBlur=true
// 将动画组件赋给头部骨架网格物体组件。这样可以保证
// 将 pawn 作为一个骨架网格物体组件一样进行处理。
ParentAnimComponent=HeadSkeletalMeshComponent
// 将阴影父代组件赋给头部骨架网格物体组件。可以使用它加快
// 渲染这个 pawn 的阴影的速度,以防阴影发生折叠现象。
ShadowParent=HeadSkeletalMeshComponent
End Object
BootsSkeletalMesh=BootsSkeletalMeshComponent
Components.Add(BootsSkeletalMeshComponent)
// 创建左肩垫骨架网格物体组件
Begin Object Class=SkeletalMeshComponent Name=LeftShouldPadSkeletalMeshComponent
bCacheAnimSequenceNodes=false
AlwaysLoadOnClient=true
AlwaysLoadOnServer=true
bOwnerNoSee=true
CastShadow=true
BlockRigidBody=true
bUpdateSkelWhenNotRendered=false
bIgnoreControllersWhenNotRendered=true
bUpdateKinematicBonesFromAnimation=true
bCastDynamicShadow=true
RBChannel=RBCC_Untitled3
RBCollideWithChannels=(Untitled3=true)
LightEnvironment=MyLightEnvironment
bOverrideAttachmentOwnerVisibility=true
bAcceptsDynamicDecals=false
bHasPhysicsAssetInstance=true
TickGroup=TG_PreAsyncWork
MinDistFactorForKinematicUpdate=0.2
bChartDistanceFactor=true
RBDominanceGroup=20
MotionBlurScale=0.0
bUseOnePassLightingOnTranslucency=true
bPerBoneMotionBlur=true
// 将动画组件赋给头部骨架网格物体组件。这样可以保证
// 将 pawn 作为一个骨架网格物体组件一样进行处理。
ParentAnimComponent=HeadSkeletalMeshComponent
// 将阴影父代组件赋给头部骨架网格物体组件。可以使用它加快
// 渲染这个 pawn 的阴影的速度,以防阴影发生折叠现象。
ShadowParent=HeadSkeletalMeshComponent
End Object
LeftShoulderPadSkeletalMesh=LeftShouldPadSkeletalMeshComponent
Components.Add(LeftShouldPadSkeletalMeshComponent)
// 创建右肩垫骨架网格物体组件
Begin Object Class=SkeletalMeshComponent Name=RightShoulderPadSkeletalMeshComponent
bCacheAnimSequenceNodes=false
AlwaysLoadOnClient=true
AlwaysLoadOnServer=true
bOwnerNoSee=true
CastShadow=true
BlockRigidBody=true
bUpdateSkelWhenNotRendered=false
bIgnoreControllersWhenNotRendered=true
bUpdateKinematicBonesFromAnimation=true
bCastDynamicShadow=true
RBChannel=RBCC_Untitled3
RBCollideWithChannels=(Untitled3=true)
LightEnvironment=MyLightEnvironment
bOverrideAttachmentOwnerVisibility=true
bAcceptsDynamicDecals=false
bHasPhysicsAssetInstance=true
TickGroup=TG_PreAsyncWork
MinDistFactorForKinematicUpdate=0.2
bChartDistanceFactor=true
RBDominanceGroup=20
MotionBlurScale=0.0
bUseOnePassLightingOnTranslucency=true
bPerBoneMotionBlur=true
// 将动画组件赋给头部骨架网格物体组件。这样可以保证
// 将 pawn 作为一个骨架网格物体组件一样进行处理。
ParentAnimComponent=HeadSkeletalMeshComponent
// 将阴影父代组件赋给头部骨架网格物体组件。可以使用它加快
// 渲染这个 pawn 的阴影的速度,以防阴影发生折叠现象。
ShadowParent=HeadSkeletalMeshComponent
End Object
RightShoulderPadSkeletalMesh=RightShoulderPadSkeletalMeshComponent
Components.Add(RightShoulderPadSkeletalMeshComponent)
}
注意事项
在上面的类中,将 Anim Node Sequence 定义为允许您测试动画。它将会使动画树停止常规工作,因此,从类脚本或对象(在一个原型内)中删除这个 Anim Node Sequence,使这个动画树可以重新正常运行。相关主题
模块化 Pawn 属性
展开每个骨架网格物体对象并正确设置这个骨架网格物体。父代骨架网格物体组件应该对 Anim Tree Template、Physics Asset 和 AnimSets 进行设置。在这个实例中,Head Skeletal Mesh 对象将会具有所有这些设置。
在您设置每个骨架网格物体的时候,它们将会显示在编辑器中。
父代网格物体组件(头部骨架网格物体)会将一个 Anim Node Sequence 设置给 Animations 对象。展开这个 Animations 选项卡显示这个 Anim Node Sequence。将这个 Anim Seq Name 赋给可以在 Anim Sets 数列中找到的动画。它将会编辑器中更新骨架网格物体组件。要显示这个动画,请运行 PIE。
父代骨架网格物体组件(头部骨架网格物体)平移、旋转和缩放会影响子代骨架网格物体组件。如果您发现这个骨架网格物体组件无法放入碰撞圆柱体中,或者该骨架网格物体组件相对 pawn 旋转而言方位不正确,或者在这个骨架网格物体组件太小的情况下,可以调整这些设置。您还可以调整这些网格物体组件的子代;只是要记住这些是相对父代的设置。
相关主题
虚幻动画集编辑器
在您设置了多余的网格物体之后,点击 Anim 选项卡显示动画列表。选择任意动画播放。您应该可以看到所有骨架网格物体动画效果。
