Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 27.12.2020
Сообщений: 34

Обнуляется переменная, по нажатию кнопки (UI)

13.03.2021, 18:38. Показов 3264. Ответов 32

Студворк — интернет-сервис помощи студентам
Допустим, есть код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
int file;               //хранит в себе номер файла
 
    public void btnclick() {
        //какой-нибудь код
        file = 2;
        //ещё какой-нибудь код
    }
    //следующий метод срабатывает по нажатию кнопки
    public void filedelete() {
        System.IO.File.Delete(путь к файлу+file+".txt");
        Debug.Log(file);
    }
Вроде бы, результатом метода "filedelete" должно быть удаление файла по адресу "директория\2.txt" и вывод в консоль "2".
Но на деле по-другому: пытается удалить несуществующий файл по адресу "директория\0.txt" и в консоль получаем "0"
То есть, переменная file при вызове метода filedelete обнуляется (это понял через Debug.Log(file), расставляя во всех методах)
Что делать? Уже много ресурсов облазил, но проблему так и не решил.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.03.2021, 18:38
Ответы с готовыми решениями:

Переменная обнуляется
Здравствуйте. У меня есть такой код: class MyClass : MonoBehaviour { public static int Number {get; private set;} ...

Обнуляется переменная
using System; namespace ConsoleApp6 { class Program

Обнуляется переменная
Добрый день. Сразу предупреждаю, мягко говоря, код не очень красивый. Проблема такая, есть 2 класса. Первый: using System; using...

32
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
14.03.2021, 16:33
Студворк — интернет-сервис помощи студентам
Temi4, А вы точно уверены, что переменную filenn больше никто не изменяет? Здесь у вас выполняются ещё три метода, и может в них происходит манипуляция с filenn тоже?
Ещё смутило, что в пути к файлу указаны слеши, наклоненные в разные стороны.
0
0 / 0 / 0
Регистрация: 27.12.2020
Сообщений: 34
14.03.2021, 16:41  [ТС]
1max1, я уже ставил private но ошибку не выдаёт и переменная нигде больше не обнуляется. Может это особенности юнити?

Добавлено через 2 минуты
samana, со слэшем проблем нету (и обратный и обычный слэши работаю, даже на паскале), а где переменной присваивается отличное от нуля значение я закоментировал такие строки.
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
14.03.2021, 16:42
Может это особенности юнити?
Ну конечно юнити виновата, хотя наверно даже сам c# или даже процессор
0
0 / 0 / 0
Регистрация: 27.12.2020
Сообщений: 34
14.03.2021, 16:44  [ТС]
Я не говорю, что виновата, просто может оно так работает, а я не знаю
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
14.03.2021, 16:45
Вот возьмите и вызовите метод удаления прямо в методе ButtonTwoClick() сразу после первой строки с filenn=2. И вряд ли filenn обнулится.
И если не обнулится, значит эту переменную изменяет что-то ещё.
А вообще здесь быстро решит проблему дебаг с точкой останова. Так же в визуал студии можно навести на переменную и выбрать "найти все ссылки" и появится список всех мест в проекте, где задействована эта переменная.
0
0 / 0 / 0
Регистрация: 27.12.2020
Сообщений: 34
14.03.2021, 16:47  [ТС]
А можно сделать один скрипт проекта на C#, а другой на C++? Может проблема сама уйдёт на другом яп

Добавлено через 1 минуту
samana, кстати да. Но так будет невероятно неудобно и, скорее всего, даже невозможно реализовать идеи
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
14.03.2021, 16:53
Но так будет невероятно неудобно
Это в целях поиска проблемы, чтобы убедиться что переменную всё таки изменяет что-то ещё.

Может проблема сама уйдёт на другом яп
Скорее всего можно подключить dll, но здесь проблема не в языке программирования.
0
0 / 0 / 0
Регистрация: 27.12.2020
Сообщений: 34
14.03.2021, 16:55  [ТС]
сделал удаление сразу после filenn = 2. Всё работает. Но надо запихнуть в другой метод
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
14.03.2021, 16:57
сделал удаление сразу после filenn = 2. Всё работает
Значит нужно искать все ссылки на filenn в других частях этого класса или даже всего проекта в целом.
0
0 / 0 / 0
Регистрация: 27.12.2020
Сообщений: 34
14.03.2021, 17:42  [ТС]
поискал все ссылки во всех скриптах и ничего. Вообще ничего. Кроме этого, нигде больше не используется

Добавлено через 31 секунду
Может дело в названии переменной... уже вообще без понятия что не так..

Добавлено через 3 минуты
с названием переменной проблемы тоже нету...

Добавлено через 38 минут
samana, короче, пришлось применять гкод. В первом методе я в конце сохраняю значение переменной в файл, а в начале второго метода её от туда считываю и всё работает
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
14.03.2021, 17:54
короче, пришлось применять гкод. В первом методе я в конце сохраняю значение переменной в файл, а в начале второго метода её от туда считываю и всё работает
Но это ведь очень грубое решение, мягко говоря..
0
0 / 0 / 0
Регистрация: 27.12.2020
Сообщений: 34
14.03.2021, 18:28  [ТС]
Но оно работает и всё
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
14.03.2021, 22:03
Лучший ответ Сообщение было отмечено Temi4 как решение

Решение

Цитата Сообщение от Temi4 Посмотреть сообщение
Но оно работает и всё
Видимо меня эта проблема задела больше, чем вас, поэтому предлагаю найти источник проблемы и исправить его.

Вы говорили, что переменную filenn больше никто не использует, хотя по факту её значение менялось где-то на стороне это факт. Если у вас нет возможности воспользоваться отладкой через VisualStudio, то можно это осуществить средствами самого Unity.

Временно замените ваше публичное поле на свойство, в котором пропишите вывод в консоль. Эти изменения не поломают программу и всё будет работать как и раньше.
То-есть сейчас у вас так:
C#
1
public int filenn = 0;
а сделайте вот так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
//public int filenn = 0;
 
private int _fileen;
public int filenn
{
    get { return _fileen; }
    set 
    {
        _fileen = value;
        Debug.LogWarning($"ИЗМЕНЕНИЕ {nameof(filenn)}");
    }
}
Теперь при любом изменении filenn в консоли будет появляться предупреждающее сообщение.
НО фишка в том, что если кликнуть в консоли по этому сообщению, то в нижней части появится стек вызовов. То-есть будет прописана последовательная цепочка (снизу вверх) всех классов и их методов, которые в итоге изменили filenn, даже номера строк будут указаны.

Это очень удобно и можно легко понять - кто всё таки был инициатором изменения свойства.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.03.2021, 22:03

Обнуляется переменная
Ребята, в общем такая проблема. При нажатии кнопки ok формы у меня почему-то обнуляется переменная id, хотя в других action'ах все отлично....

Обнуляется глобальная переменная
Добрый день. У меня обнуляется глобальная переменная, хотя и не должна. Идея в том, что каждой галлерее соответсвует своя папка в каталоге...

Переменная произвольно обнуляется
Здравствуйте. Есть класс: template<const int k,const int n> class GF { public: int F; // Массив многочленов. public: //...

Переменная не обнуляется до конца
Добрый день! Мне необходимо написать программу для расчета функции и вывести все ее значения в таблицу. Коэффициенты функции, начальное и...

Обнуляется глобальная переменная!
public static string PathRMMV = null; public string PathProjectRMMV = null; public string PathAdobeFotoshop = null; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru