Нажатие кнопки Unity регистрирует строки отладки на консоли, но не заставляет функции работать ⇐ C#
Нажатие кнопки Unity регистрирует строки отладки на консоли, но не заставляет функции работать
Я работаю над Unity-проектом, в котором есть пушечное оружие и собственная система уровней. Его работа проста, как и его сценарий, и он отлично работает при нажатии клавиш, печатает журналы отладки и вызывает функции в игре. Но мне нужно, чтобы он вызывался нажатием кнопки. Нажатие кнопки вызывает только журналы отладки связанных функций, но не может фактически повысить уровень пушки.
В сценарии CannonLevelManager, как вы можете видеть, как нажатие клавиши, так и кнопка вызывают функцию TryIncreaseCannonLevel (это была непосредственно функция увеличенияCannonLevel(); но она делает то же самое, поэтому я попробовал этот подход), а нажатие клавиши вызывает каждую функцию и журнал отладки. в совершенстве. для нажатия кнопки он вызывает TryIncreaseCannonLevel и печатает журналы отладки следующим образом: «Попытка повысить уровень пушки» «Повышение уровня пушки» «Увеличенный уровень пушки» «Вызов UpdateCannonLevel» Но ни одна функция там не вызывается и не работает.
с использованием UnityEngine; использование системы; использование System.Collections; общедоступный класс CannonLevelManager: MonoBehaviour { публичное событие Action OnCannonLevelChanged; частный статический экземпляр CannonLevelManager; частный int cannonLevel = 0; // Стартовый уровень для пушки частный float levelDamageModifier = 1.0f; // Модификатор урона по умолчанию частный уровень с плавающей запятойFireRateModifier = 1.0f; // Модификатор скорострельности по умолчанию частный bool isLevelIncreased = false; // Флаг, отслеживающий, был ли повышен уровень частная пустота Пробуждение() { // Подписываемся на событие, созданное игроком PlayerHealth.OnPlayerInstantiated += HandlePlayerInstantiated; } общедоступный статический экземпляр CannonLevelManager { получать { если (экземпляр == ноль) { Менеджер игровых объектовОбъект = GameObject.Find("CannonLevelManager"); если (managerObject == null) { менеджерОбъект = новый GameObject("CannonLevelManager"); экземпляр = менеджерОбъект.ДобавитьКомпонент(); } еще { экземпляр = менеджерОбъект.GetComponent(); } DontDestroyOnLoad (Объект менеджера); } вернуть экземпляр; } } public int GetCannonLevel() { вернуть уровень пушки; } публичная пустота UpdateCannonLevel() { Debug.Log("Вызван UpdateCannonLevel"); OnCannonLevelChanged?.Invoke(); } // Этот метод вызывается извне для повышения уровня пушки общественная недействительность TryIncreaseCannonLevel() { УвеличениеCannonLevel(); } // Этот метод увеличивает уровень пушки общественная недействительность УвеличениеCannonLevel() { если (!isLevelIncreased) { Debug.Log("Попытка повысить уровень пушки"); Debug.Log("Повышение уровня пушки"); пушечный уровень++; Debug.Log("Увеличен уровень пушки"); ОбновлениеCannonLevel(); isLevelIncreased = правда; // Установите флаг в значение true, чтобы указать повышение уровня } } общественная недействительность ResetCannonLevelManager() { уровень пушки = 0; levelDamageModifier = 1.0f; levelFireRateModifier = 1.0f; isLevelIncreased = ложь; ОбновлениеCannonLevel(); // Уведомляем подписчиков о сбросе } частное недействительное обновление() { // Проверяем, повышен ли уровень если (isLevelIncreased) { ОбновлениеМодификаторы(); isLevelIncreased = ложь; // Сбрасываем флаг } } общедоступное число с плавающей запятой GetCannonLevelDamageModifier() { вернуть уровеньDamageModifier; } общедоступное число с плавающей запятой GetCannonLevelFireRateModifier() { вернуть уровеньFireRateModifier; } частная пустота UpdateModifiers() { float DamageModifier = 1.0f + (cannonLevel * 0.1f); float fireRateModifier = 1.0f + (cannonLevel * 0.1f); levelDamageModifier = модификатор урона; levelFireRateModifier = fireRateModifier; UpdateCannonModifiers(); } частная пустота UpdateCannonModifiers() { CannonBullet[] cannonBullets = FindObjectsOfType(); foreach (CannonBullet cannonBullet в cannonBullets) { IDamageDealer повреждениеDealer = cannonBullet.GetComponent(); если (damageDealer != ноль) { DamageDealer.SetDamageModifier(levelDamageModifier); } if (cannonBullet — это IShootingRateModifier ShootingRateModifier) { ShootingRateModifier.SetShootingRateModifier(levelFireRateModifier); } } } частная пустота HandlePlayerInstantiated() { // Обработка события, созданного игроком // Например, обновить уровень пушки или выполнить другую настройку // Этот метод будет вызываться при создании экземпляра проигрывателя. } }
Я работаю над Unity-проектом, в котором есть пушечное оружие и собственная система уровней. Его работа проста, как и его сценарий, и он отлично работает при нажатии клавиш, печатает журналы отладки и вызывает функции в игре. Но мне нужно, чтобы он вызывался нажатием кнопки. Нажатие кнопки вызывает только журналы отладки связанных функций, но не может фактически повысить уровень пушки.
В сценарии CannonLevelManager, как вы можете видеть, как нажатие клавиши, так и кнопка вызывают функцию TryIncreaseCannonLevel (это была непосредственно функция увеличенияCannonLevel(); но она делает то же самое, поэтому я попробовал этот подход), а нажатие клавиши вызывает каждую функцию и журнал отладки. в совершенстве. для нажатия кнопки он вызывает TryIncreaseCannonLevel и печатает журналы отладки следующим образом: «Попытка повысить уровень пушки» «Повышение уровня пушки» «Увеличенный уровень пушки» «Вызов UpdateCannonLevel» Но ни одна функция там не вызывается и не работает.
с использованием UnityEngine; использование системы; использование System.Collections; общедоступный класс CannonLevelManager: MonoBehaviour { публичное событие Action OnCannonLevelChanged; частный статический экземпляр CannonLevelManager; частный int cannonLevel = 0; // Стартовый уровень для пушки частный float levelDamageModifier = 1.0f; // Модификатор урона по умолчанию частный уровень с плавающей запятойFireRateModifier = 1.0f; // Модификатор скорострельности по умолчанию частный bool isLevelIncreased = false; // Флаг, отслеживающий, был ли повышен уровень частная пустота Пробуждение() { // Подписываемся на событие, созданное игроком PlayerHealth.OnPlayerInstantiated += HandlePlayerInstantiated; } общедоступный статический экземпляр CannonLevelManager { получать { если (экземпляр == ноль) { Менеджер игровых объектовОбъект = GameObject.Find("CannonLevelManager"); если (managerObject == null) { менеджерОбъект = новый GameObject("CannonLevelManager"); экземпляр = менеджерОбъект.ДобавитьКомпонент(); } еще { экземпляр = менеджерОбъект.GetComponent(); } DontDestroyOnLoad (Объект менеджера); } вернуть экземпляр; } } public int GetCannonLevel() { вернуть уровень пушки; } публичная пустота UpdateCannonLevel() { Debug.Log("Вызван UpdateCannonLevel"); OnCannonLevelChanged?.Invoke(); } // Этот метод вызывается извне для повышения уровня пушки общественная недействительность TryIncreaseCannonLevel() { УвеличениеCannonLevel(); } // Этот метод увеличивает уровень пушки общественная недействительность УвеличениеCannonLevel() { если (!isLevelIncreased) { Debug.Log("Попытка повысить уровень пушки"); Debug.Log("Повышение уровня пушки"); пушечный уровень++; Debug.Log("Увеличен уровень пушки"); ОбновлениеCannonLevel(); isLevelIncreased = правда; // Установите флаг в значение true, чтобы указать повышение уровня } } общественная недействительность ResetCannonLevelManager() { уровень пушки = 0; levelDamageModifier = 1.0f; levelFireRateModifier = 1.0f; isLevelIncreased = ложь; ОбновлениеCannonLevel(); // Уведомляем подписчиков о сбросе } частное недействительное обновление() { // Проверяем, повышен ли уровень если (isLevelIncreased) { ОбновлениеМодификаторы(); isLevelIncreased = ложь; // Сбрасываем флаг } } общедоступное число с плавающей запятой GetCannonLevelDamageModifier() { вернуть уровеньDamageModifier; } общедоступное число с плавающей запятой GetCannonLevelFireRateModifier() { вернуть уровеньFireRateModifier; } частная пустота UpdateModifiers() { float DamageModifier = 1.0f + (cannonLevel * 0.1f); float fireRateModifier = 1.0f + (cannonLevel * 0.1f); levelDamageModifier = модификатор урона; levelFireRateModifier = fireRateModifier; UpdateCannonModifiers(); } частная пустота UpdateCannonModifiers() { CannonBullet[] cannonBullets = FindObjectsOfType(); foreach (CannonBullet cannonBullet в cannonBullets) { IDamageDealer повреждениеDealer = cannonBullet.GetComponent(); если (damageDealer != ноль) { DamageDealer.SetDamageModifier(levelDamageModifier); } if (cannonBullet — это IShootingRateModifier ShootingRateModifier) { ShootingRateModifier.SetShootingRateModifier(levelFireRateModifier); } } } частная пустота HandlePlayerInstantiated() { // Обработка события, созданного игроком // Например, обновить уровень пушки или выполнить другую настройку // Этот метод будет вызываться при создании экземпляра проигрывателя. } }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Нажатие кнопки строки таблицы HTML открывает формы для каждой отдельной строки.
Anonymous » » в форуме Python - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Нажатие кнопки строки таблицы HTML открывает формы для каждой отдельной строки.
Anonymous » » в форуме Jquery - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Нажатие кнопки строки таблицы HTML открывает формы для каждой отдельной строки.
Anonymous » » в форуме CSS - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Нажатие кнопки строки таблицы HTML открывает формы для каждой отдельной строки.
Anonymous » » в форуме Python - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Нажатие кнопки строки таблицы HTML открывает формы для каждой отдельной строки.
Anonymous » » в форуме CSS - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-