Изменения статической переменной между различными скриптами в Unity? - PullRequest
0 голосов
/ 05 мая 2019

У меня есть переменная gethealth в двух разных скриптах в Unity. Я создал его в первом скрипте под названием PlayerController в качестве статического публичного плавающего объекта. Когда я пытаюсь получить доступ к нему из другого скрипта (называемого «Здоровье»), он отображает что-то совершенно другое, хотя это должна быть та же самая переменная.

Я проверил, что это то же самое, используя debug.log в обоих скриптах, и каким-то образом он отображает что-то другое. Где-то по пути это должно было измениться.

Первый скрипт (класс PlayerController, в котором я создаю и устанавливаю переменную gethealth):

public float health = 250f;
static public float gethealth;

private void OnTriggerEnter2D(Collider2D col)
{
    PlayerLaser missile = col.gameObject.GetComponent<PlayerLaser>();
    if (missile)
    {
        health -= missile.GetDamage();
        gethealth = health;
        Debug.Log(gethealth);
        missile.Hit();
    }
}

Второй сценарий (класс здоровья):

void Start()
{
    Debug.Log(PlayerController.gethealth);
    Text myText = GetComponent<Text>();
    myText.text = PlayerController.gethealth.ToString();
}

Два файла debug.logs показывают разные результаты, в то время как они должны показывать одинаковые

1 Ответ

0 голосов
/ 05 мая 2019

Вы спрашиваете, почему он отображает что-то другое, но предоставленный вами код показывает нам, что он должен отображать что-то другое. В классе здоровья вы регистрируетесь PlayerController.gethealth при запуске. (См. Документацию по методу запуска: https://docs.unity3d.com/ScriptReference/MonoBehaviour.Start.html)

На PlayerController вы регистрируетесь gethealth после уменьшения вашего здоровья и переназначения.

Если в вашем коде отсутствует какая-то часть, то должно произойти, что класс Health записывает 0, значение по умолчанию для float. После этого PlayerController регистрирует число меньше 250 (250 - missile.GetDamage()). Эта регистрация происходит каждый раз, когда есть звонок на OnTriggerEnter2D, уменьшая отображаемый номер.

Что вам, вероятно, нужно, это настроить атрибут gethealth в методе Awake (см. Ссылку на предыдущую документацию) так, чтобы

Awake() { gethealth = health; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...