Без публикации c полей, как сделать ссылку на объекты пользовательского интерфейса? - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть панель интерфейса с элементом Text в качестве дочернего элемента; к нему прикреплен скрипт PlayerHUB, который будет обрабатывать обновление. У меня есть GameObject с именем Player, к которому прикреплен скрипт под названием «BaseStats», и к нему есть строковая переменная с именем Name, установленной на «Red», и, наконец, у меня есть скрипт «BattleManager», прикрепленный к пустому игровому объекту под названием Battle Manager.

Все, что я хочу сделать, это с помощью кода (без полей publi c), чтобы скрипт «BattleManager» изменил текст, который является дочерним, на панель пользовательского интерфейса на имя персонажа игрока «Красный» ", но это не работает, я не могу понять, почему.

Проблема указывает мне здесь:

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;
    }
}

И, наконец, скрипт BattleManger:

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();
        }    
    }

1 Ответ

0 голосов
/ 27 февраля 2020

GetComponent найдет только сценарии, прикрепленные к одному и тому же игровому объекту, и вернет значение null, если его нет, поэтому вы получаете ошибку NullReference. Попробуйте FindObjectOfType<PlayerHub>() вместо этого. Это будет работать, если у вас есть только один экземпляр сценария в вашей сцене. В случаях, когда у вас есть несколько экземпляров сценария и вам нужны ссылки на них, FindObjectsOfType<ScritpName>() вернет список всех сценариев этого типа в вашей сцене.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...