Size: a a a

2020 November 15

AN

Aleksandr Novik in unity3d.ru
Sergey Muhin
Сделал вот так. То есть сейчас, как я понимаю, при срабатывания триггера берется ссылка на переменную из другого скрипта. Но так как это ссылка, то и исходная переменная должна меняться. Но проблема осталась.
так int это значимый тип
источник

AN

Aleksandr Novik in unity3d.ru
тебе нужно менять напрямую поле из EnemySpawner. Лучше сделай в текущем классе приватное поле интовое, в старте сделай этому полю GetComponent, либо другим способом получи ссылку на твой компонент. И потом поле меняй
источник

m

must.be.the.ganja in unity3d.ru
Sergey Muhin
Сделал вот так. То есть сейчас, как я понимаю, при срабатывания триггера берется ссылка на переменную из другого скрипта. Но так как это ссылка, то и исходная переменная должна меняться. Но проблема осталась.
При присвоении у тебя берется копия числа спавнера
И ты именно её уменьшаешь
источник

AN

Aleksandr Novik in unity3d.ru
Когда ты делаешь enemiesRemain = GetComponent… - ты даёшь enemiesRemain число, и после этого у тебя поле в EnemySpawner и enemiesRemain никак не связаны между собой, потому что int это значимый тип
источник

SM

Sergey Muhin in unity3d.ru
Aleksandr Novik
тебе нужно менять напрямую поле из EnemySpawner. Лучше сделай в текущем классе приватное поле интовое, в старте сделай этому полю GetComponent, либо другим способом получи ссылку на твой компонент. И потом поле меняй
Я запутался, потому что изначально было так, как советуешь ты, но все равно ничего не работало))
источник

SM

Sergey Muhin in unity3d.ru
Было вот так
источник

SM

Sergey Muhin in unity3d.ru
must.be.the.ganja
При присвоении у тебя берется копия числа спавнера
И ты именно её уменьшаешь
Так в том то и дело, что нет. А это именно этого,  я хочу добиться)
источник

T

TheAndMan in unity3d.ru
Sergey Muhin
Сделал вот так. То есть сейчас, как я понимаю, при срабатывания триггера берется ссылка на переменную из другого скрипта. Но так как это ссылка, то и исходная переменная должна меняться. Но проблема осталась.
Что за игру делаешь?
источник

AN

Aleksandr Novik in unity3d.ru
Sergey Muhin
Было вот так
А, сори) это я ошибся. Делаешь поле типа private EnemySpawner _enemySpawner. Ему в старте: _enemySpawner = GetComponent<EnemySpawner>(); В коллизии меняешь _enemySpawner.EnemiesToKill
источник

m

must.be.the.ganja in unity3d.ru
Когда ты обращаешься к типу значения (в данном случае это int), ты получаешь копия этого значения, а не само значения.

Поэтому сначала возьми
EnemySpawner компонент
Запомни его в переменную
А после уменьшай именно переменную этого компонента
источник

AN

Aleksandr Novik in unity3d.ru
Aleksandr Novik
А, сори) это я ошибся. Делаешь поле типа private EnemySpawner _enemySpawner. Ему в старте: _enemySpawner = GetComponent<EnemySpawner>(); В коллизии меняешь _enemySpawner.EnemiesToKill
Получается у всех EnemyController’ов будет ссылка на один и тот же EnemySpawner, и все они будут менять одно и то же значение количнства твоих врагов
источник

m

must.be.the.ganja in unity3d.ru
По типу
var spawner = Find.....GetComponent<Spawner>();
spawner.enemiesRemain -= 1;
источник

P

Phantom in unity3d.ru
Sergey Muhin
Сделал вот так. То есть сейчас, как я понимаю, при срабатывания триггера берется ссылка на переменную из другого скрипта. Но так как это ссылка, то и исходная переменная должна меняться. Но проблема осталась.
Прочитай про разницу между reference и value type
источник

P

Phantom in unity3d.ru
По этому и советуют сперва учить язык, а потом лезть в unity
источник

P

Phantom in unity3d.ru
Sergey Muhin
Сделал вот так. То есть сейчас, как я понимаю, при срабатывания триггера берется ссылка на переменную из другого скрипта. Но так как это ссылка, то и исходная переменная должна меняться. Но проблема осталась.
Если кратко, то ты меняешь копию значения переменной, а не саму переменную
источник

SM

Sergey Muhin in unity3d.ru
Aleksandr Novik
Получается у всех EnemyController’ов будет ссылка на один и тот же EnemySpawner, и все они будут менять одно и то же значение количнства твоих врагов
Вот это сработало. Спасибо огромное.
источник

AN

Aleksandr Novik in unity3d.ru
Sergey Muhin
Вот это сработало. Спасибо огромное.
Ты же понял что изменилось, и почему всё работать начало?)
источник

SM

Sergey Muhin in unity3d.ru
Ага. Я понимал, что каких фундаментальных вещей не понимаю, но не понимал каких именно) Мне даже в голову не приходило, что можно создавать переменные как private <имя на другой класс> и уже обращаться к переменным внутри него.
источник

AN

Aleksandr Novik in unity3d.ru
Sergey Muhin
Ага. Я понимал, что каких фундаментальных вещей не понимаю, но не понимал каких именно) Мне даже в голову не приходило, что можно создавать переменные как private <имя на другой класс> и уже обращаться к переменным внутри него.
Тогда хорошо) подтягивай шарп в таком случае)
источник

r

rRangerer in unity3d.ru
Здравствуйте. Как мне установить background color для камеры Скриптом?
источник