我的脚本需要帮助。目前,重新开始关卡效果良好,但是如果玩家持有";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);
}
}