【问题标题】:UNity3D error displaying variable from another script c#UNity3D错误显示来自另一个脚本c#的变量
【发布时间】:2016-06-23 19:03:21
【问题描述】:

我有一个 UI 文本元素(在画布内),我需要从另一个脚本中获取一个值。

我现在正在做的事情(这是我最接近它的工作方式)是:

public class AttributeValueController : MonoBehaviour {

//public AttributeName attribute;
[SerializeField]
private Text attributeValue = null;

// Use this for initialization
void Start () {
    attributeValue.text = CharacterGenerator._toon.GetPrimaryAttribute("Might").AdjustedBaseValue.ToString();   
}

我在检查器上将要更改的文本组件设置为“attributeValue”。

当我运行它时,我得到了错误

Assets/Scripts/HUD Classes/AttributeValueController.cs(19,58):错误 CS0120:访问非静态成员 `CharacterGenerator._toon' 需要对象引用

和

NullReferenceException:对象引用未设置为对象的实例 UnityEngine.UI.Graphic.OnRebuildRequested() (在 C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Graphic.cs:480) UnityEngine.UI.GraphicRebuildTracker.OnRebuildRequested () (在 C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/GraphicRebuildTracker.cs:33) UnityEngine.CanvasRenderer.RequestRefresh()(在 C:/buildslave/unity/build/artifacts/generated/common/modules/UI/CanvasRendererBindings.gen.cs:314)

有人可以帮忙吗?当我用“0”替换这个函数时,它可以工作......我到处搜索,我无法修复它

【问题讨论】:

  • 永远不要以任何理由使用“[SerializeField]”。删除那个!
  • it; 绝对不可能帮助您,除非您包含相关组件的 ALL 两个类。所有的类,包括顶行等等。

标签: c# unity3d


【解决方案1】:

如果CharacterGenerator 不是静态类,则不能这样访问它。您必须创建该类的实例才能访问属性。

CharacterGenerator cGen = new CharacterGenerator();
attributeValue.text = cGen._toon.GetPrimaryAttribute("Might").AdjustedBaseValue.ToString();

虽然,鉴于这是该类的一个新实例,我不希望这些属性被填充,但也许您的类的结构是这样的。

【讨论】:

  • 鉴于他收到异常'访问非静态成员'CharacterGenerator._toon'需要对象引用',我确信它是不同的,但我高度怀疑错误意味着什么这是什么意思...你读过OP吗?
  • 无论如何,Unity 与否,规则仍然适用。他试图静态访问不是静态的东西。你不能在 C# 中做到这一点。
  • 另外@JoeBlow,CharacterGenerator 不是 Unity 的预定义类...所以我不确定你在说什么。可能想更正你所说的,因为它肯定会产生误导。
  • 我明白你的意思了,他甚至可能没有正确分配 .Text 值,但他也没有访问他想正确放入其中的属性。
猜你喜欢
  • 2014-11-12
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 2016-06-01
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多