Table of Contents

动画脚本

中级 程序员

动画通过脚本进行控制。

你可以将 AnimationComponent 添加到实体上,并在 Game Studio 中设置其参数。AnimationComponent 类主要设计为在脚本中使用。

比较有用的属性包括:

属性 说明
Animations 获取与此 AnimationComponent 关联的动画剪辑
BlendTreeBuilder 获取或设置动画混合树构建器。请注意,你可以创建自定义混合树;更多信息请参见自定义混合树
PlayingAnimations 获取活动动画列表。使用它可以自定义启动动画。正在播放的动画列表由动画处理器自动更新,因此在更改该列表或持有正在播放动画的引用时请小心

已添加到组件的动画

更多信息请参见设置动画。

使用内置的 AnimationStart 脚本

Stride 附带一个内置的 AnimationStart 脚本。你可以将此脚本作为模板来编写自己的动画脚本。

要使用 AnimationStart 脚本:

  1. 在资产视图(默认位于底部窗格),点击添加资产。

  2. 选择 Add asset > Scripts > Animation start。

    添加动画脚本

  3. 为脚本指定名称,点击创建脚本。

    创建脚本

    3a. 如果 Game Studio 询问是否保存脚本,请点击保存脚本。

    3b. 如果 Game Studio 询问是否重新加载程序集,请点击重新加载程序集。

  4. 根据需要编辑脚本并保存。

动画脚本示例

此示例脚本根据角色的行走速度为其分配简单的动画。

using Stride.Engine;

namespace AdditiveAnimation
{
    public class AnimationClipExample : SyncScript
    {
        public float MovementSpeed { get; set; } = 0f;

        private float walkingSpeedLimit = 1.0f;

        // 假定脚本附加在一个带有动画组件的实体上
        private AnimationComponent animationComponent;

        public override void Start()
        {
            // 缓存稍后需要的变量
            animationComponent = Entity.Get<AnimationComponent>();
            animationComponent.Play("Idle");
        }

        protected void PlayAnimation(string name)
        {
            if (!animationComponent.IsPlaying(name))
                animationComponent.Play(name);
        }

        public override void Update()
        {
            if (MovementSpeed <= 0)
            {
                PlayAnimation("Idle");
            }
            else if (MovementSpeed <= walkingSpeedLimit)
            {
                PlayAnimation("Walk");
            }
            else 
            {
                PlayAnimation("Run");
            }
        }
    }
}

覆盖动画混合树

你也可以覆盖动画混合树,在脚本中完成所有的动画混合。Stride 附带的第一人称射击、第三人称平台游戏和俯视角 RPG 模板使用了一些高级技术,就是这方面的示例。更多信息请参见自定义混合树。

另请参阅