You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Unity跨脚本访问Bool变量遇NullReferenceException异常求助

排查Unity空引用异常(NullReferenceException)问题

嘿,我来帮你搞定这个空引用的问题!你遇到的NullReferenceException本质是lepertriggerinstance这个变量没有被正确赋值,导致你在第17行访问它的属性时出错了。咱们一步步来分析和修复:

问题根源分析

你的报错行是if(lepertriggerinstance.GetComponent<LeperTrigger>().IsOnLeper == true),这里有两个核心问题:

  • lepertriggerinstance为null:你的Start方法里用GameObject.FindWithTag("enemy")获取对象,但要么场景里没有带enemy标签的物体,要么带标签的物体上没挂LeperTrigger脚本,导致lepertriggerinstance没被正确初始化。
  • 冗余的GetComponent调用:你已经在Start里把lepertriggerinstance赋值为LeperTrigger组件了,完全没必要再调用一次GetComponent,这属于画蛇添足,还会增加出错概率。

修复步骤

第一步:检查场景中的标签和组件挂载

打开Unity编辑器,找到你希望关联的敌人物体:

  • 确认它的标签严格是enemy(注意大小写,Unity标签区分大小写,别写成Enemy或者ENEMY);
  • 确认这个物体的Inspector面板里已经挂载了LeperTrigger脚本

第二步:修正LeperAI脚本代码

下面是优化后的代码,增加了容错判断,避免空引用,同时简化了逻辑:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LeperAI : MonoBehaviour {
    public LeperTrigger lepertriggerinstance;

    void Start() {
        // 先查找带标签的物体,增加容错日志
        GameObject enemyObject = GameObject.FindWithTag("enemy");
        if (enemyObject != null) {
            lepertriggerinstance = enemyObject.GetComponent<LeperTrigger>();
            if (lepertriggerinstance == null) {
                Debug.LogError("警告:带enemy标签的物体上没有挂载LeperTrigger脚本!");
            }
        } else {
            Debug.LogError("警告:场景中找不到带有enemy标签的物体!");
        }
    }

    void Update() {
        // 先判断实例不为null,再检查变量状态
        if (lepertriggerinstance != null && lepertriggerinstance.IsOnLeper) {
            Debug.Log("Leper jump");
        }
    }
}

额外优化建议

  • 更可靠的赋值方式:如果你不想用标签查找,可以直接在Unity编辑器里,把挂载了LeperTrigger脚本的物体拖到LeperAI组件的lepertriggerinstance字段上,这样完全避免了查找失败的问题;
  • 完善碰撞逻辑:当前LeperTriggerOnCollisionEnter2D只会在碰撞开始时把IsOnLeper设为true,如果玩家离开物体,这个变量不会变回false。你可以添加OnCollisionExit2D方法来重置变量:
    private void OnCollisionExit2D(Collision2D collision) {
        if (collision.gameObject.tag == "Player") {
            IsOnLeper = false;
        }
    }
    

内容的提问来源于stack exchange,提问作者FRP72

火山引擎 最新活动