如何在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);
}
}
}
我错过了什么?
这将重新加载当前场景
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex,LoadSceneMode.Single);