按下按钮时Unity再次运行非循环动画

时间:2018-05-03 17:49:12

标签: c# animation unity3d uibutton

我目前在Unity中创建一些(非循环)动画,应该在按下UI按钮时启动。我有四个按钮用于四个动画。目前它的工作原理如下:我按下button1然后播放animation1。如果我然后按button2播放animation2,我可以再次点击button1开始动画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);
    }
}

1 个答案:

答案 0 :(得分:0)

您的更新方法在哪里?你怎么称这些虚空方法?

放置具有条件的更新方法以检查单击了哪个按钮。所以像这样:

void Update() 
{
    if (Input.GetKeyDown("space"))
    {
       //Play animation. 
    }            
}

编辑:好的,当你按下按钮播放第一个动画,然后再次按下该按钮时,动画已经是真的,所以动画已经播放了。在完成动画制作后,您需要将其设置为false。当你按下其他按钮时,它再次播放的原因是什么。

编辑:尝试这种风格

public void anim1Clicked()
{
   animation.Play("anim1");
}