You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中从其他GameObject调用GetComponent功能失效问题求助

问题根因

代码的核心错误为变量遮蔽问题:Awake方法中声明了一个和类成员变量同名的局部ScoreManager变量,GetComponent的返回值被赋值给了这个作用域仅在Awake方法内的临时变量,方法执行结束后临时变量会被回收,类的全局ScoreManager成员始终为null,因此触发器触发时的判空逻辑不通过,加分代码不会运行。

修复后代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class OnTrigger : MonoBehaviour{
    [SerializeField] private GameObject ScoreManagerObject;
    private ScoreManager ScoreManager;

    private void Awake() {
        if (ScoreManagerObject != null){
            // 移除局部变量的类型声明,直接给类成员变量赋值
            ScoreManager = ScoreManagerObject.GetComponent<ScoreManager>();
            // 新增组件不存在的报错日志,方便后续排查
            if(ScoreManager == null){
                Debug.LogError("指定的ScoreManagerObject对象上未找到ScoreManager组件", this);
            }
        }
        else{
            Debug.LogError("请在Inspector面板为ScoreManagerObject字段赋值对应对象", this);
        }
    }
    private void OnTriggerEnter(Collider other) {
        if (ScoreManager != null){
            ScoreManager.score += 1;
            Debug.Log("score " + ScoreManager.score );
        }
    }
}
额外排查项
  • 确认Inspector面板中已经将挂载了ScoreManager脚本的游戏对象拖入ScoreManagerObject字段
  • 确认ScoreManager脚本中的score变量为public权限,否则会触发访问权限报错
  • 确认ScoreManagerObject对象上确实挂载了ScoreManager脚本,脚本名称拼写无错误

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:27:04