前言
当制作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下的对象这个方法无法获取。