我在做什么:
制作菜单系统!
我想要的:
每当菜单处于打开或关闭状态时,我想在菜单元素上播放动画。但是,我的菜单在各自的状态下也有一个打开和关闭的动画。因此,当我从一个菜单转换到另一个菜单时,我希望当前菜单元素动画首先关闭然后关闭其菜单,当下一个菜单打开时,我希望菜单首先播放开放动画然后播放其元素。但这一切都取决于我设置的转换类型,因此,我是以通用形式对其进行编码,因此编辑器可以完全配置它。
我采取的方法:
我正在使用Unity的Mecanim系统来实现他的目标。
我已将动画师附加到所有需要的元素和菜单上 他们的动画。
我制作了两个剧本" UIManager.cs"和" ElementAnimator.cs"。
我附上了" UIManager.cs"在 Canvas Level 和 " ElementAnimator.cs"在菜单级别。
我为我的菜单动画师创建了多个参数 各种过渡。
在UI管理器中,我创建了菜单链接,我也设置了 调用转换 OnClick 事件时的动画器参数。
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。它被称为三次或四次,但它仍然不一致!我只需要通过键控变量调用一次。
提前致谢。