c# - 按下按钮时 Unity 再次运行非循环动画
问题描述
我目前正在 Unity 中创建一些(非循环)动画,这些动画应该在按下 UI 按钮时开始。我有四个用于四个动画的按钮。目前它的工作原理是这样的:我按下按钮 1 然后动画 1 正在播放。如果我然后按下按钮 2 播放动画 2,我可以再次单击按钮 1 开始动画 1。
现在的问题是:animation1 只能在之前播放另一个动画时再次播放。所以我的问题是:我需要对以下代码进行什么更改,以让例如每次按下 button1 时播放动画 1?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MultiAnimations : MonoBehaviour {
public Animator cubeAnimator;
public bool anim1;
public bool anim2;
public bool anim3;
public bool anim4;
// Use this for initialization
void Start () {
cubeAnimator.enabled = false;
anim1 = false;
anim2 = false;
anim3 = false;
anim4 = false;
}
public void anim1Clicked ()
{
cubeAnimator.enabled = true;
anim1 = true;
anim2 = false;
anim3 = false;
anim4 = false;
if (anim1 == true)
{
cubeAnimator.SetBool("anim1", true);
cubeAnimator.SetBool("anim2", false);
cubeAnimator.SetBool("anim3", false);
cubeAnimator.SetBool("anim4", false);
}
}
public void anim2Clicked ()
{
cubeAnimator.enabled = true;
anim1 = false;
anim2 = true;
anim3 = false;
anim4 = false;
if (anim2 == true)
{
cubeAnimator.SetBool("anim1", false);
cubeAnimator.SetBool("anim2", true);
cubeAnimator.SetBool("anim3", false);
cubeAnimator.SetBool("anim4", false);
}
}
public void anim3Clicked()
{
cubeAnimator.enabled = true;
anim1 = false;
anim2 = false;
anim3 = true;
anim4 = false;
if (anim3 == true)
{
cubeAnimator.SetBool("anim1", false);
cubeAnimator.SetBool("anim2", false);
cubeAnimator.SetBool("anim3", true);
cubeAnimator.SetBool("anim4", false);
}
}
public void anim4Clicked()
{
cubeAnimator.enabled = true;
anim1 = false;
anim2 = false;
anim3 = false;
anim4 = true;
if (anim4 == true)
{
cubeAnimator.SetBool("anim1", false);
cubeAnimator.SetBool("anim2", false);
cubeAnimator.SetBool("anim3", false);
cubeAnimator.SetBool("anim4", true);
}
}
}
动画与过渡和布尔连接。我以本教程为导向:https ://www.youtube.com/watch?v=Q_5FhXF9a3k
已解决: YouTube 教程中提供的代码非常迂回。您可以节省很多代码行来简单地编写它:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MultiAnimations : MonoBehaviour {
public Animator cubeAnimator;
// Play Animation 1 - Copy this for the other animations
public void playAnimation1 ()
{
cubeAnimator.Play("animation1", -1, 0f);
}
}
解决方案
你的更新方法在哪里?你怎么称呼这些 void 方法?
放置一个带有条件的更新方法以检查单击了哪个按钮。所以是这样的:
void Update()
{
if (Input.GetKeyDown("space"))
{
//Play animation.
}
}
编辑:好的,当您按下按钮播放第一个动画,然后再次按下该按钮时,动画已经是真的,所以动画已经播放了。播放完动画后,您需要将其设置为 false。这就是当您按下其他按钮时它会再次播放的原因。
编辑:试试这种风格
public void anim1Clicked()
{
animation.Play("anim1");
}
推荐阅读
- amazon-web-services - 如何使用 AWS 资源管理器下载和编辑 lambda
- woocommerce - 在 Woocommerce 中隐藏侧边栏
- alfresco - 如何在露天覆盖 ftl
- sql - SQL 查找特定节点并将其值 (json) 作为 excel 格式的结果返回
- reactjs - 谷歌地图 API 与 React
- python - 如何在python pandas中传递日期参数来执行sql存储过程
- python - 如何使用 beautifulsoup 从 banggood.com 获取运费
- python-3.x - 如何计算字典中有多少个值
- javascript - Gmail 应用程序脚本功能,用于显示来自 GMail 插件的浏览器 MsgBox
- c# - 在通用 IEnumerable 上使用 yield return 时提前退出调用代码