冬飒 2023-04-10 06:43 采纳率: 100%
浏览 51
已结题

对象引用未设置为对象的实例错误,求解惑

在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;

    }
}

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2023-04-10 09:23
    关注

    以下内容部分参考ChatGPT模型:


    这个错误通常是因为尝试使用一个未被实例化的对象。在你的代码中,可能是因为无法找到名为"World"的游戏对象导致的。你可以添加一些调试语句来确定是哪个对象未被实例化。例如,在Start()函数中,你可以添加以下代码:

    GameObject worldObject = GameObject.Find("World");
    if (worldObject == null)
    {
        Debug.Log("World object not found!");
    }
    else
    {
        world = worldObject.GetComponent<World>();
    }
    

    这将检查是否找到了名为"World"的游戏对象。如果没有找到,它将打印一条消息到控制台,以便你知道是哪个对象未被实例化。如果找到了对象,它将执行你原来的代码来获取组件。

    另外,你也可以在Update()函数中添加类似的调试语句,以确保所有需要的对象都已被实例化。


    如果我的建议对您有帮助、请点击采纳、祝您生活愉快

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月14日
  • 修改了问题 4月10日
  • 创建了问题 4月10日

悬赏问题

  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)