在unity里我遇到一个问题报错但是好像可以运行,但是我害怕后面的代码会因此运行不起来,求帮忙看看
NullReferenceException: Object reference not set to an instance of an object(对象引用未设置为对象的实例)
DebugScreen.Update () (at Assets/Script/DebugScreen.cs:38)
脚本是这样的:
public class DebugScreen : MonoBehaviour
{
World world;
Text text;
float frameRate;
float timer;
int halfWorldSizeInVoxels;
int halfWorldSizeInChunks;
void Start()
{
world = GameObject.Find("World").GetComponent<World>();
text = GetComponent<Text>();
halfWorldSizeInVoxels = VoxelData.WorldSizeInVoxels / 2;
halfWorldSizeInChunks = VoxelData.WorldSizeInChunks / 2;
}
void Update()
{
string debugText = "b3agz' Code a Game Like Minecraft in Unity";
debugText += "\n";
debugText += frameRate + " fps";
debugText += "\n\n";
debugText += "XYZ: " + (Mathf.FloorToInt(world.player.transform.position.x) - halfWorldSizeInVoxels) + " / " + Mathf.FloorToInt(world.player.transform.position.y) + " / " + (Mathf.FloorToInt(world.player.transform.position.z) - halfWorldSizeInVoxels);
debugText += "\n";
debugText += "Chunk: " + (world.playerChunkCoord.x - halfWorldSizeInChunks) + " / " + (world.playerChunkCoord.z - halfWorldSizeInChunks);
text.text = debugText;
if (timer > 1f)
{
frameRate = (int)(1f / Time.unscaledDeltaTime);
timer = 0;
}
else
timer += Time.deltaTime;
}
}
这个错误通常是因为尝试使用一个未被实例化的对象。在你的代码中,可能是因为无法找到名为"World"的游戏对象导致的。你可以添加一些调试语句来确定是哪个对象未被实例化。例如,在Start()函数中,你可以添加以下代码:
GameObject worldObject = GameObject.Find("World");
if (worldObject == null)
{
Debug.Log("World object not found!");
}
else
{
world = worldObject.GetComponent<World>();
}
这将检查是否找到了名为"World"的游戏对象。如果没有找到,它将打印一条消息到控制台,以便你知道是哪个对象未被实例化。如果找到了对象,它将执行你原来的代码来获取组件。
另外,你也可以在Update()函数中添加类似的调试语句,以确保所有需要的对象都已被实例化。
很明显是没有这个对象或者设置错误了
在update里要先判断world到底赋值了没有
update是一直在执行的,不管你有没有先调用start,所以world可能还没有赋值
加个if( world!=null)
正常的项目中,这是个非常初级的错误。
比较常见的原因是就是在对象被引用前没有实例化。
即是说,你要管理好程序的生命周期。