Unity3d 将动画添加到Inputfield并保存变换
我想在unity UI的输入字段中添加一个简单的搜索动画。 这是我的输入字段,当我选择它时,它应该缓慢扩展,当我取消选择它时,它应该收缩回其正常形式 这是此inputfield的rect Transform组件。我在输入字段和事件触发器组件中添加了一个动画师。我创建了两个名为SearchAnimation和DeceleAnimation的动画,并将它们添加到名为“SearchController”的AnimationController中。 这就是我设计SearchController的方式: 我将defaultState和SearchAnimation之间的转换设置为监听SelectBool和DeselectBool(名称已经描述了它的用途) 然后,我将以下脚本添加到我的输入字段中,以便根据事件触发器设置这两个布尔值:Unity3d 将动画添加到Inputfield并保存变换,unity3d,Unity3d,我想在unity UI的输入字段中添加一个简单的搜索动画。 这是我的输入字段,当我选择它时,它应该缓慢扩展,当我取消选择它时,它应该收缩回其正常形式 这是此inputfield的rect Transform组件。我在输入字段和事件触发器组件中添加了一个动画师。我创建了两个名为SearchAnimation和DeceleAnimation的动画,并将它们添加到名为“SearchController”的AnimationController中。 这就是我设计SearchController的方式
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class OnClickScript : MonoBehaviour {
Animator anim;
void Start()
{
anim = GetComponent<Animator>();
}
public void OnSelect()
{
anim.SetBool("SelectBool", true);
anim.SetBool("DeselectBool", false);
GetComponent<RectTransform>().sizeDelta = new Vector2(450, 50);
GetComponent<RectTransform>().localPosition.Set(-275, 0, 0);
}
public void OnDeselect()
{
anim.SetBool("DeselectBool", true);
anim.SetBool("SelectBool", false);
GetComponent<RectTransform>().sizeDelta = new Vector2(200, 50);
GetComponent<RectTransform>().localPosition.Set(-130, 0, 0);
}
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用UnityEngine.UI;
公共类OnClick脚本:MonoBehavior{
动画师;
void Start()
{
anim=GetComponent();
}
公开无效OnSelect()
{
动画设置工具(“SelectBool”,true);
anim.SetBool(“取消bool”,false);
GetComponent().sizeDelta=新向量2(450,50);
GetComponent().localPosition.Set(-275,0,0);
}
公共选择()
{
动画设置工具(“取消选择布尔”,真);
动画设置工具(“SelectBool”,false);
GetComponent().sizeDelta=新向量2(200,50);
GetComponent().localPosition.Set(-130,0,0);
}
}
但在播放动画后,输入字段将被设置回其初始大小和位置。如何解决此问题?简易方法: 再创建一个剪辑。剪辑仅由一个键组成,该键是所选状态的
大小增量。然后使此片段成为该状态的动画片段
我把我的测试项目
使用上述方法,一旦要更改默认状态和选定状态的大小,就必须手动更改所有四个动画剪辑
艰难的道路
使用从脚本创建动画。使用这种方法,您可以创建更多可维护的动画。但是用脚本创建复杂的动画并不容易
建议:
使用枢轴:
在脚本中,您正在更改本地位置以防止输入字段向上移动。如果希望输入字段向下展开,可以将轴Y设置为1,而不是更改“局部位置”值
使用触发器:
不用使用两个bool
变量,只需使用一个Trigger
即可触发动画开始并移动到下一个状态
没有想到给选定的状态另一个动画,这很简单