Unity菜单中的脚本动画转换

时间:2016-04-29 16:14:27

标签: c# user-interface animation unity3d 2d

我在做什么:

制作菜单系统!

我想要的:

每当菜单处于打开或关闭状态时,我想在菜单元素上播放动画。但是,我的菜单在各自的状态下也有一个打开和关闭的动画。因此,当我从一个菜单转换到另一个菜单时,我希望当前菜单元素动画首先关闭然后关闭其菜单,当下一个菜单打开时,我希望菜单首先播放开放动画然后播放其元素。但这一切都取决于我设置的转换类型,因此,我是以通用形式对其进行编码,因此编辑器可以完全配置它。

我采取的方法:

  1. 我正在使用Unity的Mecanim系统来实现他的目标。

  2. 我已将动画师附加到所有需要的元素和菜单上 他们的动画。

  3. 我制作了两个剧本" UIManager.cs"和" ElementAnimator.cs"。

  4. 我附上了" UIManager.cs"在 Canvas Level 和 " ElementAnimator.cs"在菜单级别

  5. 我为我的菜单动画师创建了多个参数 各种过渡。

  6. 在UI管理器中,我创建了菜单链接,我也设置了 调用转换 OnClick 事件时的动画器参数。

  7. ElementAnimator.cs脚本问题:

    这是我为ElementAnimator.cs编写的代码:

    public bool playMenuElements;
    public bool value;
    public Elements[] elements;
    
    void SetBool(bool value) {
        for (int i = 0; i < elements.Length; i++) {
            if (elements [i].animator != null && elements [i].parameter != "")
                elements [i].animator.SetBool (elements [i].parameter, value);
        }
    }
    
    void Update() {
        if (playMenuElements) {
            Debug.Log (this.gameObject.name + " " + playMenuElements);
            SetBool(value);
        }
    }
    

    在检查器中,我将playMenuElements变量在所需的帧处键入true或false。我在下一帧中将其设置为false,以避免任何不必要的内存使用。但是,问题是有时会调用函数SetBool()。难道我做错了什么?我的appoarch不好吗?任何人都可以帮助我吗?无法想到任何事情,没有选择和想法:(

    我的想法

    呼叫取决于fps速率,它解释了通过密钥调用SetBool的随机性。我试过跳过几帧然后将变量设置为false。它被称为三次或四次,但它仍然不一致!我只需要通过键控变量调用一次。

    提前致谢。

0 个答案:

没有答案