Unity3d 将动画添加到Inputfield并保存变换

Unity3d 将动画添加到Inputfield并保存变换,unity3d,Unity3d,我想在unity UI的输入字段中添加一个简单的搜索动画。 这是我的输入字段,当我选择它时,它应该缓慢扩展,当我取消选择它时,它应该收缩回其正常形式 这是此inputfield的rect Transform组件。我在输入字段和事件触发器组件中添加了一个动画师。我创建了两个名为SearchAnimation和DeceleAnimation的动画,并将它们添加到名为“SearchController”的AnimationController中。 这就是我设计SearchController的方式

我想在unity UI的输入字段中添加一个简单的搜索动画。

这是我的输入字段,当我选择它时,它应该缓慢扩展,当我取消选择它时,它应该收缩回其正常形式

这是此inputfield的rect Transform组件。我在输入字段和事件触发器组件中添加了一个动画师。我创建了两个名为SearchAnimation和DeceleAnimation的动画,并将它们添加到名为“SearchController”的AnimationController中。 这就是我设计SearchController的方式: 我将defaultState和SearchAnimation之间的转换设置为监听SelectBool和DeselectBool(名称已经描述了它的用途)

然后,我将以下脚本添加到我的输入字段中,以便根据事件触发器设置这两个布尔值:

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
即可触发动画开始并移动到下一个状态


没有想到给选定的状态另一个动画,这很简单