【问题标题】:Adding Animation to Inputfield and save the transform将动画添加到输入字段并保存转换
【发布时间】:2018-11-26 08:49:50
【问题描述】:

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

这是我的 InputField,我的想法是,当我选择它时,它应该慢慢扩展,当我取消选择它时,它应该收缩回正常形式。

这是此输入字段的矩形变换组件。我添加了输入字段和事件触发器组件和一个动画器。我创建了两个名为 SearchAnimation 和 DeselectAnimation 的动画,并将它们添加到名为“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);
    }

}

但在播放动画后,输入字段会被设置回其初始大小和位置。我该如何解决这个问题?

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    简单的方法

    再创建一个剪辑。剪辑仅由一个键组成,即 SelectedState 的 Size Delta。然后让这个剪辑成为状态的动画剪辑。

    我把我的测试项目here.

    使用上述方法,一旦您想更改默认状态和选定状态的大小,您将不得不手动更改所有四个动画剪辑。

    艰难的路

    使用AnimationClip.SetCurve 从脚本创建动画。使用这种方法,您可以创建更多可维护的动画。但是用脚本制作复杂的动画并不容易。

    建议

    使用枢轴:

    在脚本中,您正在更改本地位置以防止输入字段向上移动。如果您希望输入字段向下扩展,您可以将枢轴 Y 设置为 1,而不是更改本地位置值。

    使用触发器:

    您可以简单地使用一个Trigger 来触发动画开始并移动到下一个状态,而不是使用两个bool 变量。

    【讨论】:

    • 没想到给选中的状态再添加一个动画,很简单
    猜你喜欢
    • 2016-03-23
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2017-12-25
    相关资源
    最近更新 更多