前言

当制作UI界面时,如果我们想要进行一些简单的动画效果,例如:划入、划出、渐变等,
如果用代码来操作会导致不直观,缺乏灵活性,所以我打算直接用Animation动画来实现。
但由于UI界面过多,获取Animation和AnimationState时会非常麻烦
这里我写了两个能够快速且便捷的获取组件的方法

代码部分

List<Animation> UIMovement;

private void Awake()
{
    //获取Canvas下所有带有Animation组件的对象,包括未启用的对象,用其建立一个列表
    var anims = GameObject.Find("Canvas").GetComponentsInChildren<Animation>(true);
    UIMovement = new List<Animation>(anims);
}

private Animation GetAnimation(string name)//使用获取Animation
{
    return UIMovement.Find((n) => name == n.name);//在列表中寻找并返回和name同名的对象;
}

private AnimationState GetState(Animation anim, string clipName) //获取Animation状态
{
    AnimationState state = null; //创建一个空AnimationState
    try
    {
        state = anim[clipName];//如果对象存在则赋给state并返回
    }
    catch (Exception e)
    {
        Debug.LogError(e.Message);//否则提示错误信息并返回null
    }
    return state;
}

使用方法

建议在创建UI和Animation时,所取的名字保持一致
需要注意的一点是,该方法是直接获取Canvas下的所有带Animation组件的对象,未在Canvas下的对象这个方法无法获取。