按下";R〃;重新启动(UNITY)



我的脚本需要帮助。目前,重新开始关卡效果良好,但是如果玩家持有";r〃;关键是,游戏会重新加载每一帧,这会导致某些系统出现故障和崩溃。

我该如何修改我的脚本以防止出现此问题?

谢谢!

  • 大卫

这是我当前的脚本。

public void Update()
{   // Reset game on "r" press
if (!levelIsComplete)
{
if (Input.GetKeyDown("r"))
{
Time.timeScale = 1f;
Retry();
}
}
public void Retry()
{
//Restarts current level
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}

创建一个单独的脚本并附加到不同的游戏对象。

将其标记为DontDestroyOnLoad。

public class Reloader : MonoBehaviour {
void Awake() {
DontDestroyOnLoad(this.gameObject);
}
void Update() {
if (Input.GetKeyDown(KeyCode.R)) {
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}
}

您应该检查按钮是否被按下,如果是,则不要让它再次被调用。

public class restartGame: MonoBehaviour {
bool restart;
void Awake() {
DontDestroyOnLoad(this.gameObject);
restart = false;
}
void Update() {
if (Input.GetKeyDown(KeyCode.R) && !restart) {
restart = true;  
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}
}

或者使用释放按钮时调用的Input.GetKeyUp

void Update() {
if (Input.GetKeyUp(KeyCode.R) && !restart) {
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SceneController : MonoBehaviour
{
private bool canRestart = false;
private void Update()
{
if (Input.GetKeyDown(KeyCode.R) && canRestart)
{
canRestart = false;
Restart();
}
}
private void Restart()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}

最新更新