Unity Panel禁用自己而不是显示动画

时间:2017-04-17 22:27:52

标签: c# android unity3d

所以我在Unity游戏中的c#中遇到了这个小问题。

我的屏幕上有2个面板,在屏幕上点击那些面板应该从屏幕上消失动画,但它们只是消失了。

这是我的代码:

public class PanelManager : MonoBehaviour {

    public static PanelManager instance;

    void Awake(){
        if (instance == null) {
            instance = this;
        }

    }


    public GameObject PanelUp;
    public GameObject PanelDown;
    public GameObject TapText;
    public GameObject score;
    public Text highScore;


    // Use this for initialization
    void Start () {
        highScore.text = "Highscore: " + PlayerPrefs.GetInt ("score");

    }

    // Update is called once per frame
    void Update () {

    }

    public void GameStart() {
        TapText.SetActive (false);
        score.SetActive (true);
        PanelUp.GetComponent<Animator> ().Play ("MenuUp");
        PanelDown.GetComponent<Animator> ().Play ("MenuDown");
    }

    public void StopAnimations() {
        TapText.SetActive (false);
        PanelUp.SetActive (false);
        PanelDown.SetActive (false);
    }

}

我正在调用这样的函数(在其他类中):

private void Update ()
    {
        if (gameOver)
            return;

        if (!started) {
            if (Input.GetMouseButtonDown (0)) {
                started = true;
                PanelManager.instance.GameStart ();
                if (started = true) {
                    PanelManager.instance.StopAnimations ();
                }


            }
        } else {
            if (Input.GetMouseButtonDown (0)) {

                if (PlaceTile ()) {
                    SpawnTile ();
                    scoreCount++;
                    scoreText.text = scoreCount.ToString ();
                } else {
                    EndGame ();
                }
            }
        }

        MoveTile ();

        // Move the stack
        transform.position = Vector3.Lerp(transform.position,desiredPosition,STACK_MOVING_SPEED * Time.deltaTime);
    }

1 个答案:

答案 0 :(得分:1)

你没有给你的面板动画足够的时间来完成。你打电话PanelManager.instance.GameStart ();会启动动画,但是在你调用PanelManager.instance.StopAnimations ();后会立即停用面板,这样你就不会看动画了。

要解决该问题,您可以使用Coroutine,它会等待动画完成所需的时间。

因此,例如,如果您的动画持续1秒,您就可以拥有这样的Coroutine

IEnumerator PlayAnimation()
{
    PanelManager.instance.GameStart ();

    yield return new WaitForSeconds(1);
    PanelManager.instance.StopAnimations ();
}

你可以通过

来调用Coroutine
StartCoroutine(PlayAnimation());