【发布时间】:2021-06-25 10:12:22
【问题描述】:
我正在开发一款基于 Unity 的休闲 2D 游戏。我有点卡住了。我有 2 个脚本:一个在游戏开始时加载 - (MainMenuScript.cs),一个在每个场景开始时加载 - (LevelControlScript.cs)
我需要随机化场景,但 index_scene = UnityEngine.Random.Range(a, b) 并不是我所需要的。但我仍然需要以随机顺序显示场景。我在哪里写了这段代码:
MainMenuScript.cs:
- 创建一个列表,我们在其中放置播放的场景。它应该在加载时初始化一次。
LevelControlScript.cs:
-
随机选择下一个场景并与列表中的值进行检查。
-
如果列表包含该场景 - 选择另一个随机场景,如果它不在列表中 - 它会播放,然后该场景应添加到播放场景列表中。
-
播放完所有场景后 - 应清除列表。
所以,它应该旋转直到我手动离开关卡。
但是,我不明白为什么 unity 会显示此错误以及如何修复它:NullReferenceException: Object reference not set to an instance of an object LevelControlScript.LoadNextLevel () (at Assets/Scripts/LevelControlScript.cs :606)
MainMenuScript:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainMenuScript : MonoBehaviour {
public List<int> remember = new List<int>(); //here
public void StartLvl()
{
SceneManager.LoadScene("Scenes/LVL");
}
public void Quit()
{
Application.Quit();
}
}
LevelControlScript:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class LevelControlScript : MonoBehaviour {
MainMenuScript mainmenu; //here
// Variable to contain current scene build index
int currentSceneIndex;
void Start() {
mainmenu = GetComponent<MainMenuScript>(); //here
// Getting current scene build index
currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
}
// Method is invoked when correct answer is given
public void RightAnswer()
{
Code...
}
// Method loads next level
public void LoadNextLevel()
{
int index_scene = UnityEngine.Random.Range(1, 10);
foreach (int index in mainmenu.remember)
{
if (index == index_scene)
{
index_scene = UnityEngine.Random.Range(1, 10);
}
}
if (mainmenu.remember.Count == 10)
{
mainmenu.remember.Clear();
}
mainmenu.remember.Add(index_scene);
SceneManager.LoadScene(index_scene);
}
}
【问题讨论】:
-
究竟是哪一行引发了该错误? Unity 说“LevelControlScript.cs:606”,即第 606 行,那是哪一个?请edit您的问题以注释或仅包含该行或两者的单独代码块突出显示有问题的行
-
@MindSwipe 第 606 行:foreach(mainmenu.remember 中的 int 索引)
-
所以
mainmenu为空,您确定将mainmenu组件添加到包含LevelControlScript的GameObject 吗? -
@MindSwipe 很抱歉,但我对它还很陌生……我不能像 Unity 中的 GameObject 那样使用它。如果我在 LevelControlScript 中将 mainmenu 添加到 GameObject,例如:public GameObject mainmenu; 我有一个错误:错误 CS0102:“LevelControlScript”类型已经包含“mainmenu”的定义。
标签: c# list random nullreferenceexception