Animation是基于关键帧的动画系统,适用于简单的动画需求;
而Animator是一种状态机驱动的动画系统,适用于更复杂的动画逻辑和交互式动画。
通常,Animator组件更适合用于游戏中的角色动画控制,
而Animation组件则更适合用于简单的动画效果。
动画(Animation Clip)选择一个动画clip
Animations:添加动画列表
Play Automatically:自动播放
Animate Physics:在游戏中模拟物理效果和运动。编写脚本来控制游戏对象的物理行为,例如重力、碰撞、力的应用等。
Culling Type(剔除类型):
总是动画化(AlwaysAnimate):无论物体是否在相机视野内,动画都将播放并更新。这个选项会消耗更多的性能,因为即使物体不可见,动画仍然在播放。
Based On Renderers:根据物体的渲染器来确定是否需要播放动画。如果物体的所有渲染器都在相机视野内,则播放动画;否则停止动画。这个选项可以减少不必要的动画计算,提高性能。
Ctrl+6打开动画时间轴
Play/Stop 播放/停止动画:
Animation.Play("animationName")
:播放指定名称的动画。Animation.Stop("animationName")
:停止指定名称的动画。CrossFade 渐变切换动画:
Animation.CrossFade("animationName", fadeLength)
:从当前动画渐变切换到指定名称的动画,fadeLength为过渡时间。IsPlaying 判断动画是否正在播放:
Animation.IsPlaying("animationName")
:返回指定名称的动画是否正在播放的布尔值。Blend 动画混合:
Animation.Blend("animationName")
:将指定名称的动画与当前动画进行混合。Rewind 倒放动画:
Animation.Rewind("animationName")
:将指定名称的动画倒放。Sample 动画采样:
Animation.Sample()
:在当前时间点采样动画,用于手动控制动画播放的进度。Avatar:阿凡达,代表用户或角色的虚拟人物或数字化的形象。
在使用Unity时,可以通过以下步骤创建Avatar:
创建人物模型:在Unity中创建一个3D模型,例如角色或怪物。确保该模型包含骨骼系统,以便后面的动画制作。
导入动画数据:将已经制作好的动画数据导入到Unity中,例如FBX文件或其他支持的格式。您可以使用Unity的Animation窗口来预览和编辑动画效果。
创建Avatar:在Unity的Project视图中右键单击导入的动画文件,选择"Rig->Create Avatar"来创建Avatar。Unity会自动为您生成默认的Avatar,并将其绑定到人物模型上。
配置Avatar:根据人物模型的具体情况,您可以进一步配置Avatar的参数。例如,您可以调整Avatar的身高、骨骼长度、旋转角度等属性,以确保动画效果正确地应用到人物模型上。
应用动画:将Avatar应用到人物模型上,以便在游戏中播放动画。您可以使用Animator组件来控制Avatar的行为和状态,例如切换不同的动画片段、设置动画参数等。
应用根运动(Root Motion):允许使用动画的根骨骼来驱动角色或对象的移动。
按照以下步骤进行操作应用根运动:
创建动画:在3D建模软件中创建角色的动画,确保动画中包含根骨骼的平移和旋转信息。例如,一个角色行走的动画应该包含根骨骼在世界空间中的移动。
导入动画:将动画导入到Unity中,并将其设置为角色的动画剪辑。确保在导入时启用"Import Root Motion"选项。
创建Animator组件:在角色对象上添加Animator组件,并将导入的动画剪辑分配给Animator Controller。
配置Avatar:确保角色的Avatar已经正确配置。在Avatar的"Motion"部分,选择"Default"或"Humanoid"选项, 以便使用根运动。
设置动画参数:在Animator Controller中创建适当的参数,例如"Speed"来控制角色移动的速度。
应用根运动:选择角色的Animator组件,在Inspector窗口中找到"Apply Root Motion"选项,并勾选它。
public class AnimatorControllerExample : MonoBehaviour
{
private Animator animator; // Animator组件的引用
private static readonly int IsRunning = Animator.StringToHash("IsRunning"); // Animator参数名称的哈希值
private void Start()
{
// 获取Animator组件的引用
animator = GetComponent<Animator>();
}
private void Update()
{
// 按下空格键时,设置Animator参数的布尔值为true,播放动画
if (Input.GetKeyDown(KeyCode.Space))
{
animator.SetBool(IsRunning, true);
}
// 松开空格键时,设置Animator参数的布尔值为false,停止动画
if (Input.GetKeyUp(KeyCode.Space))
{
animator.SetBool(IsRunning, false);
}
}
}