Задать вопрос
@Jrtq

Почему значение статической переменной не меняется?

В одном из скриптов я создал публичную булевую статическую переменную inDamage, потом, в зависимости от значения, выполняю определённые действия с ней.
В другом скрипте я делаю RayCast, если луч сталкивается с коллайдером, то переменная inDamage становится true, если нет - false. Этот скрипт есть на нескольких объектах. Но даже если я удалю все копии, кроме одной, он всё равно не заработает.
Итак, почему значение inDamage не меняется?
Код RayCast'а:
Ray2D ray2D = new Ray2D(transform.position, transform.right);
RaycastHit2D hitInfo = Physics2D.Raycast(ray2D.origin, ray2D.direction, 10);
if (hitInfo.collider.CompareTag("Player"))
{
    ScriptName.inDamage = true;
}
else
{
    ScriptName.inDamage = false;
}


Я плохо знаком со статическими переменными, поэтому ошибка может быть в чём угодно.
К слову, если inDamage будет нестатической и если изменять её в том же скрипте, где она была объявлена, то всё работает, поэтому проблема либо где-то на сцене, либо в RayCast'е.
  • Вопрос задан
  • 90 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Ezekiel4
Охотник на пиратов и сборщик монолитов
Если источник имеет коллайдер, результатом вы всегда будете получать источник. Только поэтому у вас не выпала NullPointerException. Метод Physics2D.Raycast всегда возвращает объект, но его поле collider может быть пустым (null), если луч ушёл в пустоту, тогда попытка вызвать метод collider.CompareTag вообще провалится.
Если не хотите сильно заморачиваться, просто создайте слой, например, Player и повесьте его на игрока. Таким образом вы заодно избавитесь от необходимости проверять тег.
https://docs.unity3d.com/ScriptReference/Physics2D...
Как вы можете увидеть по ссылке выше, метод имеет перегрузку:
// поле класса
public LayerMask playerLayer;
// метод из примера
RaycastHit2D hitInfo = Physics2D.Raycast(ray2D.origin, ray2D.direction, 10, playerLayer);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Сделай эту свою переменную get/set и смотри в отладчике кто там её ещё меняет.
Ну а вообще логика тут плохая: если хоть один тебя не дамажит, то никто не дамажит.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы