首页 > 解决方案 > 如何从非活动游戏对象访问脚本?

问题描述

当我尝试从我的保存和加载脚本访问播放器脚本时。它总是说“对象引用未设置为对象的实例”。我知道它的原因是 GameObject 处于非活动状态。

public Player player;

void Start()
{
  player = GetComponent<Player>().
}

标签: c#unity3d

解决方案


是的,从您拥有的一小部分代码和信息来看,这将是问题所在。Unity 的 start 函数只会在对象被激活时被调用。我建议你将这种初始化移到它自己的函数中。

如果您在需要时分配引用,您也可以执行延迟初始化属性之类的操作:

private Player m_Player;
public Player player 
{
    get 
    {
        if (m_Player == null)
        {
            m_Player = GetComponent<Player>();
        }

        return m_Player;
    }
}

在这个例子中, player现在是一个属性,你调用它的方式和以前一样,但是当你这样做时,会检查变量 m_Player 是否为空,然后分配它。


推荐阅读