找回密码
 立即注册
查看: 336|回复: 0

Unreal里的动画

[复制链接]
发表于 2023-4-10 11:06 | 显示全部楼层 |阅读模式
Unreal里的动画这么理解:
动画资源:AnimSequence, AnimMontage, BlendSpace...  其中,AnimSequence是我们导入的最基础的AnimClip,AnimMontage和BlendSpace都是在Unreal的Personal里用AnimSequence进一步制作的。
动画控制:AnimationBlueprint。
AnimationBlueprint包含两部分:Anim Graph和Event Graph。  
Anim Graph: 动画状态转换(动画状态机)、动画混合(支持简单混合,目前还没有强大的混合树功能)。
Event Graph:可以自定义一些Event。或者处理某些AnimSequence、AnimMontage里插入的某些Event。
Unreal将角色逻辑和动画逻辑分开来处理,这样子处理有他的道理,只不过用户需要多了解Character和AnimInstance的通信机制。以CharacterBlueprint和AnimationBlueprint为例。
用户输入控制行走:
CharacterBlueprint里接受用户输入,由Character的MovementComponent得到Character的Speed。 而这个Speed是决定AnimationBlueprint里Idle-Walk-Run的参数。AnimationBlueprint如何从CharacterBlueprint获取信息呢?


其实看到了两种模式,(1)Try Get Pawn Owner节点得到当前的Player,由Player可以得到Velocity设置给AnimBP的Speed;
(2)另一个就是需要做类型转换,将获取的Character转换为我们的MyCharacter,也就是我们已经用到的CharacterBP类型,此时就能获取MyCharacter 这个CharacterBP里的成员,变量、函数、Event,只要有访问权限,都能调用。
另外Try Get Pawn Owner节点可以换为Get Owning Actor节点。Get Owning Actor获取的是使用这个AnimationBlueprint的Actor。在这里这两个节点获取的对象是相同的。

动画状态机里一些动画状态的转换条件由AnimationBlueprint的一些Variable控制。而这些Variable又经常受用户输入影响,也就是这些Variable的值需要从CharacterBlueprint获取。 本质和前文的“用户输入控制行走”无差。

不用状态机转换,用Slot来控制:
需要制作AnimMontage,在AnimGraph里将Slot连接到Final Animation Pose。那么接下来不管是在AnimationBlueprint里的Event Graph里用Montage Play节点调用Montage,还是在CharacterBlueprint里用Play Anim Montage节点调用Montage,都可行!
注意,但在CharacterBlueprint里用PlayAnimMontage节点调用带RootMotion的Montage时,播放时可能会出现角色只出现位移没有播放相应动作的现象。 建议动画的处理还是尽量放在AnimBlueprint里。CharacterBlueprint只是告诉AnimBlueprint播放什么动画就好了。

完全不用AnimationBluerpint,直接在CharacterBlueprint里用Play Animation节点调用最原始的AnimSequence
注意,Play Animation节点是可以在CharacterBlueprint里用的,不过得注意去掉Context Sensitive。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-23 08:32 , Processed in 0.146360 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表