Ошибка доступа к свойству через классы: ссылка на объект требуется для метода или свойства нестатического поля - PullRequest
0 голосов
/ 22 февраля 2019

Я баловался единством и столкнулся с проблемой, так как не смог понять, как уведомить другой класс о том, что способность была использована и обратный отсчет активен.Я понимаю, что это потому, что мне нужно создавать статические ссылки, но я не совсем уверен, как их использовать, но при этом могу изменить значение.Я включу только важные моменты, чтобы вам не пришлось тратить свое время.(Я хочу иметь возможность использовать usedAbilities.canFireball теперь таким же, как когда я вызываю его в сценарии огненного шара.)

**fireball**
enter code here  '  
float canuseFireballtimer = 0;
bool startCooldown = false;
// Update is called once per frame
void Update()
{
    if (startCooldown) {
        usedAbilities.canFireballnow = false; // error
        canuseFireballtimer += Time.deltaTime;

        if (canuseFireballtimer >= 5) {
            usedAbilities.canFireballnow = true; //error
        }
    }
if (Input.GetKeyDown(KeyCode.Q) && enoughmana && usedAbilities.canFireballnow) { // error

        startCooldown = true;

        ManaBar.mana -= 10f;
        Instantiate(fireballPrefab, fireballSpawn.position, fireballSpawn.rotation);
    }
}'

сценарий usedAbilities

enter code here '

public bool canFireballnow = true;

} '

Спасибо, коллега-программист

1 Ответ

0 голосов
/ 22 февраля 2019

Прежде всего, вам нужно добавить ссылку на ваш объект.Вы можете сделать это с помощью [SerializeField] перед созданием переменной типа GameObject.Например:

[SerializeField]
GameObject obj;

Затем в Unity вы можете перетащить GameObject из Иерархии в Инспектор. Это то, что вы должны увидеть в Инспекторе.

Затем вам нужно получить компонент сценария GameObject, чтобы наконец прочитать его значение.

obj.GetComponent<name_of_your_script>().value;

Ваш окончательный код должен выглядеть следующим образом:

[SerializeField]
GameObject abilities;

void Update() {
    if (canuseFireballtimer >= 5) {
        abilities.GetComponent<usedAbilities>().canFireballnow = true;
    }

Примечание. Ваша переменная должна быть общедоступной.

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