1) Формула расстояния (@yayashitoya почти правильно написал - там корень еще, либо радиус квадратичный)
2) Прям в юнити есть magnitude и sqrMagnitude - расстояние между Vector3
3) Ну можно еще коллайдеры (триггеры) использовать
Не надо просто оперировать событиями юнити на уровне игровой логики.
OnDestroy/OnDisable нужны чтобы оперировать состоянием объекта как сущности движка, но не как игровой сущности.
Если вам нужно уничтожить лампочку - вызовите у нее СВОЙ метод Destroy.
Чтобы не завалить проект - начинать надо с описания проекта - тобишь технического задания. И дальше уже на его основе определять что вам нужно и как это сделать.
P.S. В VS2017 немало языков программирования. И платформ. Вот начните хотя бы с этого.
ArgumentOutOfRangeException
startIndex is negative or greater than the length of this instance.
Вот отсюда - https://docs.microsoft.com/en-us/dotnet/api/system...
Чтобы вставить в позицию j (которая на первой итерации внешнего цикла будет от 0 до needText.Length) в строке maintext.Text уже должно быть достаточное количество символов - т.е. needText.Length.
Более того - вставка пустой строки не имеет смысла. Удаляйте через substring, например.
Не сильно понятно что вам нужно и главное почему.
Цикл так или иначе будет. Слово "найти" уже подразумевает перебор вариантов. Цикл может быть скрыт (Where из LINQ). Он может пройти не по всему массиву, а только до нахождения нужного количества (просто выходим из цикла когда нашли все что нужно.
Без цикла можно разве что заранее сложить нужные объекты куда то. Но по моему это не то что вам нужно...
Можно конечно отсортировать массив по parentRoomId и взять первые 3 элемента - но сортировка тоже цикл.
Про класс PlayerPrefs уже читали?
Советую - пишите ваш статус в какой нибудь класс ваш, потом его перегоняете в json, json потом сохраняете через PlayerPrefs. Ну и обратный процесс аналогично...
1) НалРеф - ошибка выполнения, не компиляции
2) В самой ошибке должна быть указана строчка. Какая?
3) GetComponent в Update - ужасное зло. Кстати скорее всего в этой строчке и ошибка - точно Rigidbody2d есть на объекте?
1) Никогда не перезаписывайте переменную-аргумент функции. Т.е. вот это:
number = (int)Math.Round(number);
не делайте. Заведите новую переменную
2) Исходя из первого пункта - какой тип данных будет у этой переменной?
3) Посмотрите на то, что принимает и возвращает Math.Pow.
Если прямо отвечать на вопрос - никак.
OnCollisionStay2D вызывается для того объекта, на котором висит скрипт его содержащий. Так же как и другие функции MonoBehaviour - Update, Awake и прочее.
Вы или чего то не дописали, или что, но.
Сразу есть очевидная проблема - newTimer никогда не будет равен нулю.
Вообще строгое сравнение float - это плохо. Надо сраванивать по модулю с учетом погрешности.
Но конкретно в вашем случае ошибка больше логическая.
Допусти newTimer = 1 секунда. Time.deltaTime - величина непостоянная - вероятность что за например 10 ферймов (а апдейт вызывается каждый фрейм) сумма deltaTime будет ИМЕННО СТРОГО одна секунда - ну практически ноль.
Так что вам нужно нестрогое условие типа newTimer <= 0;