如何在unity中重新加载关卡

本文关键字:加载 新加载 unity | 更新日期: 2023-09-27 18:12:16

我创造了一个简单的2d石头剪刀布游戏,在每个玩家按下一个按钮后,他们会被带到一个有两个按钮的游戏结束屏幕:退出和再次玩。

问题是,当用户按下"再次播放"按钮时,我不知道如何重新启动游戏。以下是我尝试过的:

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
public class PlayAgain : MonoBehaviour ,IPointerClickHandler{
    public void OnPointerClick(PointerEventData eventData)
    {   
        GameObject.FindGameObjectWithTag("Player1").transform.localScale = new Vector3(1,1,1);
        GameObject.FindGameObjectWithTag("Player2").transform.localScale = new Vector3(0,0,0);
        GameObject.FindGameObjectWithTag("GameOverScreen").transform.localScale = new Vector3(0,0,0);
        SceneManager.LoadScene (SceneManager.GetActiveScene().name);
    }
}
带有"player1/2/GameOverScreen"标签的对象是面板,GameOverScreen是当前面板。这应该(如果我没有错的话)重置所有变量的值,它们是由场景加载后应该播放的第一个脚本给出的。为了确保这一点,我创建了一个像这样的场景执行顺序:

变量->事件-> OnClickRock/纸/剪刀-> PlayAgain

以下是其他脚本:

变量:

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
public class Variables :MonoBehaviour {
    static public string Player1Choice;
    static public bool Player1Turn=true;
    static public string Player2Choice;
    static public bool Player2Turn=true;
    static public bool GameOver=false;
    static public bool Player1Victory=false;
    static public bool Player2Victory=false;
    static public bool Draw=false;
}

事件
using UnityEngine;
using System.Collections;
public class Events : MonoBehaviour {
    void Start()
    {
        GameObject.FindGameObjectWithTag("Player1").transform.localScale = new Vector3(1,1,1);
        GameObject.FindGameObjectWithTag("Player2").transform.localScale = new Vector3(0,0,0);
        GameObject.FindGameObjectWithTag("GameOverScreen").transform.localScale = new Vector3(0,0,0);
    }
    void Update ()
    {
        if (Variables.Player1Turn == false) {
            GameObject.FindGameObjectWithTag ("Player1").transform.localScale = new Vector3 (0, 0, 0);
            GameObject.FindGameObjectWithTag ("Player2").transform.localScale = new Vector3 (1, 1, 1);
        }
        if (Variables.GameOver == true) 
        {
            if (Variables.Player1Choice == "rock") 
            {
                if (Variables.Player2Choice == "rock") 
                {
                    Variables.Draw = true;
                }
                else if (Variables.Player2Choice == "paper")
                {
                    Variables.Player2Victory = true;
                }
                else if (Variables.Player2Choice == "scissors")
                {
                    Variables.Player1Victory = true;
                }
            }
            else if (Variables.Player1Choice == "paper")
            {
                if (Variables.Player2Choice == "rock")
                {
                    Variables.Player1Victory = true;
                }
                else if (Variables.Player2Choice == "paper")
                {
                    Variables.Draw = true;
                }
                else if (Variables.Player2Choice == "scissors")
                {
                    Variables.Player2Victory = true;
                }
            }
            else if (Variables.Player1Choice == "scissors")
            {
                if (Variables.Player2Choice == "rock")
                {
                    Variables.Player2Victory = true;
                }
                else if (Variables.Player2Choice == "paper")
                {
                    Variables.Player1Victory = true;
                }
                else if (Variables.Player2Choice == "scissors")
                {
                    Variables.Draw = true;
                }
            }
            if (Variables.Player1Victory == true)
            {
                print("Player 1 won!");
            }
            else if(Variables.Player2Victory == true)
            {
                print("Player 2 won!");
            }
            else
            {
                print("It's a draw!");
            }
            print("Player one chose: " + Variables.Player1Choice);
            print("Player two chose: " + Variables.Player2Choice);
            GameObject.FindGameObjectWithTag ("Player2").transform.localScale = new Vector3 (0, 0, 0);
            GameObject.FindGameObjectWithTag("GameOverScreen").transform.localScale = new Vector3(1,1,1);
        }
    }
}

我错过了什么?

如何在unity中重新加载关卡

这将重新加载当前场景

SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex,LoadSceneMode.Single);