Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果没有公共字段,如何引用UI对象?_C#_Unity3d - Fatal编程技术网

C# 如果没有公共字段,如何引用UI对象?

C# 如果没有公共字段,如何引用UI对象?,c#,unity3d,C#,Unity3d,我有一个UI面板,它的子元素是文本元素;它附带了PlayerHUB脚本,用于处理更新。我有一个名为Player的GameObject,附带了一个名为“BaseStats”的脚本,它有一个名为Name的字符串变量设置为“Red”,最后我有一个名为BattleManager的空游戏对象附带了一个“BattleManager”脚本 我想做的就是,通过代码(没有公共字段),让“战地管理者”脚本将U.I面板的子文本更改为玩家角色“红色”的名称,但它不起作用,我不知道为什么 问题就在这里告诉我: void

我有一个UI面板,它的子元素是文本元素;它附带了PlayerHUB脚本,用于处理更新。我有一个名为Player的
GameObject
,附带了一个名为“BaseStats”的脚本,它有一个名为Name的字符串变量设置为“Red”,最后我有一个名为BattleManager的空游戏对象附带了一个“BattleManager”脚本

我想做的就是,通过代码(没有公共字段),让“战地管理者”脚本将U.I面板的子文本更改为玩家角色“红色”的名称,但它不起作用,我不知道为什么

问题就在这里告诉我:

void Start()
{

    playerHUB.SetUP(baseStats);
}
下面是我的BaseStats脚本附加到玩家:

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


public class BaseStats : MonoBehaviour
{
    public string Name = "Red";
}
以下是PlayerHUB脚本:

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

public class PlayerHUB : MonoBehaviour
{
    Text nameText;

    public void SetUP(BaseStats baseStats)
    {
        nameText = GameObject.Find("PlayerHUB").GetComponentInChildren<Text>();
        nameText.text = baseStats.Name;
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用UnityEngine.UI;
公共类玩家俱乐部:单一行为
{
文本名称文本;
公共无效设置(BaseStats BaseStats)
{
nameText=GameObject.Find(“PlayerHUB”).getComponentChildren();
nameText.text=baseStats.Name;
}
}
最后是战地经理脚本:

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


    public class BattleManager : MonoBehaviour
    {
        PlayerHUB playerHUB;
        BaseStats baseStats;


        // Start is called before the first frame update
        void Start()
        {
            playerHUB = GetComponent<PlayerHUB>();
            baseStats = GetComponent<BaseStats>();
            playerHUB.SetUP();
        }    
    }
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类战地经理:单一行为
{
PlayerHUB PlayerHUB;
BaseStats BaseStats;
//在第一帧更新之前调用Start
void Start()
{
playerHUB=GetComponent();
baseStats=GetComponent();
playerHUB.SetUP();
}    
}

GetComponent将只查找附加到同一游戏对象的脚本,如果没有附加脚本,则返回null,这就是为什么会出现NullReference错误。请改为尝试
FindObjectOfType()
。如果场景中只有一个脚本实例,则此操作将有效。如果您有一个脚本的多个实例,并且需要引用它们,
FindObjectsOfType()
将返回场景中该类型的所有脚本的列表。

将该字段设置为属性
公共字符串名称{get;set;}=“Red”
。如果BaseStats本身无法使用,请将其抽象化,并将属性抽象化。也可以考虑使用<代码> >名称(Pr.Server Hub)<代码>,而不是代码中的字符串const,AKA“Malk Valuy”实现<代码> NotryYyPrimyType 并使用数据绑定。在控制台上是否有任何类型的错误?是的,我得到了Null Rebug:对象引用没有被设置为对象的实例。它在寻找什么,但我不知道它想要什么。。。