【发布时间】:2016-10-23 20:17:49
【问题描述】:
我正在尝试使用附加到第二个游戏对象的其他脚本从附加到游戏对象的脚本中调用函数。
这两个游戏对象被称为:Player、Game Manager。
玩家有一个名为 Gold 的脚本,而游戏管理器有一个名为 GameManager 的脚本
尝试从 GameManager.cs 调用 Gold.cs 中的 SetGold() 函数,但出现错误:NullReferenceException: Object reference not set to an istance of an object
我当前的代码: Gold.cs:
using UnityEngine;
using System.Collections;
public class Gold : MonoBehaviour {
GameManager gm;
public UnityEngine.UI.Text goldDisplay;
private float _gold;
void Start ()
{
gm = GameObject.Find("Game Manager").GetComponent<GameManager>();
gm.Load();
}
void Update ()
{
UpdateGoldDisplay();
}
public void SetGold(float x)
{
_gold = x;
}
public float GetGold()
{
return _gold;
}
public void UpdateGoldDisplay()
{
SetGoldDisplay(GetGold().ToString());
}
public void SetGoldDisplay(string x)
{
goldDisplay.text = x;
}
}
我的其他脚本 (GameManager.cs)
using UnityEngine;
using System.Collections;
public class GameManager : MonoBehaviour {
GameObject GO_Player;
Gold gold;
void Start ()
{
GO_Player = GameObject.Find ("Player");
gold = GO_Player.GetComponent<Gold>();
}
void OnApplicationQuiot()
{
Save();
}
public void Load()
{
gold.SetGold(PlayerPrefs.GetFloat("gold", 50));
}
private void Save()
{
PlayerPrefs.SetFloat("gold", 1);
}
public void DeleteSaves()
{
PlayerPrefs.SetFloat("gold", 0);
}
}
提前致谢。
【问题讨论】:
-
将以下内容从
GameManager gm;初始化为gm = new GameManager();并对gold对象执行相同操作或创建构造函数 -
而不是 new GameManager();我不得不使用 gm = gameObject.AddComponent
();出于某种原因,当我点击 Play 时,它在一秒钟内多次生成相同的错误: NullReferenceException: Object reference not set to an instance of an object Gold.SetGoldDisplay (Single amount) (at Assets/Scripts/Player/Gold.cs :37) 但我已将 Text 对象拖放到层次结构编辑器中的 gameObject 中:\ -
@MethodMan 不能在继承自
MonoBehaviour的类上使用new关键字。 OPS 当前代码看起来不错。 -
你能发布你的层次结构的截图吗?另外,你可以选择你的游戏对象然后截图并上传吗?只需在问题中发布屏幕截图的两个链接
标签: c# object unity3d reference