首页 > 解决方案 > 按下按钮时 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);
    }
}

标签: c#animationunity3duibutton

解决方案


你的更新方法在哪里?你怎么称呼这些 void 方法?

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

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

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

编辑:试试这种风格

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

推荐阅读