我已经关注并完成了一个Unity tutorial但是一旦完成了教程,就没有提到重启游戏的功能。
除了关闭应用程序并重新打开之外,我将如何添加这样的内容?
答案 0 :(得分:6)
有很多方法可以在Unity中重启游戏:
1 。将每个有用的变量(如位置,旋转,得分)重置为默认位置。当您使用此方法而不是#2 时,您将减少加载游戏所需的时间。
创建UI按钮,然后将其拖动到编辑器中的resetButton
插槽。
//Drag button from the Editor to this
public Button resetButton;
Vector3 defaultBallPos;
Quaternion defaultBallRot;
Vector3 defaultBallScale;
int score = 0;
void Start()
{
//Get the starting/default values
defaultBallPos = transform.position;
defaultBallRot = transform.rotation;
defaultBallScale = transform.localScale;
}
void OnEnable()
{
//Register Button Event
resetButton.onClick.AddListener(() => buttonCallBack());
}
private void buttonCallBack()
{
UnityEngine.Debug.Log("Clicked: " + resetButton.name);
resetGameData();
}
void resetGameData()
{
//Reset the position of the ball and set everything to the starting postion
transform.position = defaultBallPos;
transform.rotation = defaultBallRot;
transform.localScale = defaultBallScale;
//Reset other values below
}
void OnDisable()
{
//Un-Register Button Event
resetButton.onClick.RemoveAllListeners();
}
2 。拨打SceneManager.LoadScene("sceneName");
再次加载场景。调用Button.onClick.AddListener
时可以调用此函数。
创建UI按钮,然后将其拖动到编辑器中的resetButton
插槽。
//Drag button from the Editor to this
public Button resetButton;
void OnEnable()
{
//Register Button Event
resetButton.onClick.AddListener(() => buttonCallBack());
}
private void buttonCallBack()
{
UnityEngine.Debug.Log("Clicked: " + resetButton.name);
//Get current scene name
string scene = SceneManager.GetActiveScene().name;
//Load it
SceneManager.LoadScene(scene, LoadSceneMode.Single);
}
void OnDisable()
{
//Un-Register Button Event
resetButton.onClick.RemoveAllListeners();
}
决定使用哪种方法取决于场景中的对象数量以及场景加载所需的时间。如果场景中有一个带有烘焙光照贴图和HQ纹理的巨大世界,那么请使用#1。
答案 1 :(得分:0)
例如,您可以重新加载主场景以重启游戏。
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);