From Valve Developer Community
动画文件存储在动画组(Animation Group)中。一个 VMDL 可以包含多个动画组,他们可以是内部或外部的。
显示
- 点击一个动画项以在视窗中播放该动画。用时间轴播放/暂停,调整重播时间和整理动画。
创建
Edit
- 添加 材质映射(material remap) 项:选择"材质映射列表(Material Remap List)"项并在属性编辑器(property editor)中按绿色的"+"。
- 编辑 材质映射(material remap) 项:在大纲(outliner)中选择它。
数据结构(Data Structures)
VMDL动画的参考数据结构如下:
CVanimGroupReference[] m_pAnimGroups =
[
CVanimGroupReference
{
CVanimGroup* m_pObject = &CVanimGroup_0
string m_sFileName = ""
}
]
m_pAnimGroups
CVanimGroupReference中元素的列表
CVanimGroupReference
对内部或外部的CVanimGroup的参考
Attribute |
Friendly Name |
Description |
Type |
Default Value |
属性 |
易记名称 |
描述 |
类型 |
默认值 |
m_pObject |
|
内部 CVanimGroup的指针 |
CVanimGroup* |
|
m_sFileName |
|
外部CVhitBoxSetList相对路径 |
string |
|
m_sScripts |
Scripts |
代码文件的列表 |
string[] |
|
CVanimGroup
动画组在VMDL中数据结构如下:
CVanimGroup CVanimGroup_0
{
string m_Name = ""
CVReferenceSkeletonReference m_pReferenceSkeleton = CVReferenceSkeletonReference
{
CVReferenceSkeleton* m_pObject = NULL
string m_sFileName = ""
}
CVBoneFlagListReference m_pBoneFlagList = CVBoneFlagListReference
{
CVBoneFlagList* m_pObject = NULL
string m_sFileName = ""
}
CVseqGroupReference m_pSeqGroup = CVseqGroupReference
{
CVseqGroup* m_pObject = NULL
string m_sFileName = ""
}
CVanimGroupReference[] m_pAnimGroups =
[
]
CVanim[] m_Vanim =
[
CVanim
{
string m_Animationname = "attack01"
string m_Filepath = "models\\sdk_character\\dmx\\animation\\attack01.dmx"
int m_nStartframe = 0
int m_nEndframe = 54
float m_flFps = 30.000000
CAnimationLoop m_Loop = CAnimationLoop
{
bool m_bLoop = false
bool m_bSmoothLoop = false
int m_nSmoothLoopStart = 0
int m_nSmoothLoopEnd = 0
CVAnimCmdStartLoop m_StartLoop = CVAnimCmdStartLoop
{
bool m_bEnabled = false
int m_nLoopRestart = 0
}
}
bool m_bHidden = false
CActivity[] m_Activities =
[
]
CAnimationEvent[] m_AnimationEvents =
[
]
CMotionFrame[] m_MotionFrames =
[
CMotionFrame
{
int m_nFrame = 0
bool m_bExtractTX = true
bool m_bExtractTY = true
bool m_bExtractTZ = false
bool m_bExtractRX = false
bool m_bExtractRY = false
bool m_bExtractRZ = false
bool m_bDiscardTX = false
bool m_bDiscardTY = false
bool m_bDiscardTZ = false
bool m_bDiscardRX = false
bool m_bDiscardRY = false
bool m_bDiscardRZ = false
}
]
CIKrule*[] m_pIkRules =
[
]
CAdjustAnimation m_adjustAnimation = CAdjustAnimation
{
float(3) m_translation = ( 0.000000, 0.000000, 0.000000 )
float(3) m_rotation = ( 0.000000, 0.000000, 0.000000 )
}
string[] m_Keywords =
[
]
}
]
string[] m_sScripts =
[
]
}
CVanimGroup
Attribute |
Friendly Name |
Description |
Type |
Default Value |
属性 |
易记名称 |
描述 |
类型 |
默认值 |
m_name |
Name |
动画组的名称 |
string |
|
m_pReferenceSkeleton |
Skeleton |
CVReferenceSkeleton的指针 |
CVReferenceSkeletonReference |
|
m_pBoneFlagList |
Bone Encoding Flags |
CVBoneFlagList的指针 |
CVBoneFlagListReference |
|
m_pSeqGroup |
Sequence Group |
CVseqGroup的指针 |
CVseqGroupReference |
|
m_pAnimGroups |
Animation Group References |
外部动画组列表 |
CVanimGroupReference[] |
|
m_Vanim |
Animations |
CVanim文件列表 |
CVanim[] |
|
Note:m_pSeqGroup和m_pReferenceSkeleton 不要再使用。
CVanim
Attribute |
Friendly Name |
Description |
Type |
Default Value |
属性 |
易记名称 |
描述 |
类型 |
默认值 |
m_Animationname |
Name |
动画名称 |
string |
|
m_Filepath |
File Path |
外部资源文件相对路径 |
string |
|
m_nStartframe |
Start Frame |
开始逐帧动画 |
int |
0 |
m_nEndFrame |
End Frame |
结束逐帧动画 |
int |
0 |
m_flFps |
FPS |
逐帧动画速率 |
float |
30.0 |
m_Loop |
|
动画循环命令 |
CAnimationLoop |
|
m_bHidden |
Hidden |
从UI隐藏compiled sequence |
bool |
false |
m_Activities |
Activities |
CActivity中元素的列表 |
CActivity[] |
|
m_AnimationEvents |
Animation Events |
CAnimationEvent中元素的列表 |
CAnimationEvent[] |
|
m_MotionFrames |
Motion Frames |
CMotionFrame中元素的列表 |
CMotionFrame[] |
|
m_pIkRules |
IK Rules |
CIKrule* 中元素的列表 |
CIKrule*[] |
|
m_adjustAnimation |
Adjust Animation |
CAdjustAnimation 元素 |
CAdjustAnimation |
|
m_Keywords |
Keywords |
关键字列表 |
string[] |
|
CAnimationLoop
Attribute |
Friendly Name |
Description |
Type |
Default Value |
属性 |
易记名称 |
描述 |
类型 |
默认值 |
m_bLoop |
Loop |
动画是否循环 |
bool |
false |
m_bSmoothLoop |
Smooth Loop |
动画循环是否平滑 |
bool |
false |
m_nSmoothLoopStart |
Frames From Start |
平滑开头的数帧 |
int |
0 |
m_nSmoothLoopEnd |
Frames From End |
平滑结尾的数帧 |
int |
0 |
m_StartLoop |
|
动画开始循环 |
CVAnimCmdStartLoop |
|
CVAnimCmdStartLoop
Attribute |
Friendly Name |
Description |
Type |
Default Value |
属性 |
易记名称 |
描述 |
类型 |
默认值 |
m_bEnabled |
Start Loop |
动画是否强制循环 |
bool |
false |
m_nLoopRestart |
Loop Restart |
重新开始循环 |
bool |
false |
CActivity
Attribute |
Friendly Name |
Description |
Type |
Default Value |
属性 |
易记名称 |
描述 |
类型 |
默认值 |
m_Name |
Name |
活动名称 |
string |
|
m_nWeight |
Weight |
活动负担 |
int |
1 |
CAnimationEvent
Attribute |
Friendly Name |
Description |
Type |
Default Value |
属性 |
易记名称 |
描述 |
类型 |
默认值 |
m_Event |
Event |
动画事件名称 |
string |
|
m_nFrame |
Frame |
触发事件帧 |
int |
0 |
m_DataString |
Data String |
其他信息 |
string |
|
CMotionFrame
Attribute |
Friendly Name |
Description |
Type |
Default Value |
属性 |
易记名称 |
描述 |
类型 |
默认值 |
m_nFrame |
Frame |
获取动作帧 |
int |
0 |
m_bExtractTX |
Extract TX |
获取X轴位移 |
bool |
false |
m_bExtractTY |
Extract TY |
获取Y轴位移 |
bool |
false |
m_bExtractTZ |
Extract TZ |
获取Z轴位移 |
bool |
false |
m_bExtractRX |
Extract RX |
获取X轴旋转 |
bool |
false |
m_bExtractRY |
Extract RY |
获取Y轴旋转 |
bool |
false |
m_bExtractRZ |
Extract RZ |
获取Z轴旋转 |
bool |
false |
m_bDiscardTX |
Discard TX |
取消X轴位移 |
bool |
false |
m_bDiscardTY |
Discard TY |
取消Y轴位移 |
bool |
false |
m_bDiscardTZ |
Discard TZ |
取消Z轴位移 |
bool |
false |
m_bDiscardRX |
Discard RX |
取消X轴旋转 |
bool |
false |
m_bDiscardRY |
Discard RY |
取消Y轴旋转 |
bool |
false |
m_bDiscardRZ |
Discard RZ |
取消Z轴旋转 |
bool |
false |
Tip:在动画的0帧增加单独的动作帧将一次性获取整个动画的动作。
CAdjustAnimation
Attribute |
Friendly Name |
Description |
Type |
Default Value |
属性 |
易记名称 |
描述 |
类型 |
默认值 |
m_translation |
Translation |
调整动画的位移(X,Y,Z) |
float( 3 ) |
( 0.000000, 0.000000, 0.000000 ) |
m_rotation |
Rotation |
调整动画的旋转(X,Y,Z) |
float( 3 ) |
( 0.000000, 0.000000, 0.000000 ) |