Koshkina
Гуру
(3497)
1 месяц назад
Проблема в том, что вы пытаетесь получить узел с именем "Button", который, вероятно, не существует в сцене. Если ваш скрипт уже прикреплён к кнопке, вам не нужно искать её снова. Попробуйте изменить код.
Рустам Абдрашитов
Мыслитель
(8667)
1 месяц назад
Ошибка, с которой вы столкнулись, указывает на несоответствие между именем файла скрипта и именем класса. Убедитесь, что имя файла Button.cs совпадает с именем класса ButtonHandler, и что вы используете правильное имя класса в GetNode<Button>("Button"). Также проверьте, что проект собран: в меню Godot выберите Project -> Tools -> C# -> Create C# Solution и убедитесь, что проект компилируется перед запуском.
Рустам АбдрашитовМыслитель (8667)
1 месяц назад
Советую лучше такой код
using Godot;
using System;
public class ButtonHandler : Button
{
public override void _Ready()
{
// Подключаем сигнал "pressed" непосредственно к методу
Connect("pressed", this, nameof(OnButtonPressed));
}
private void OnButtonPressed()
{
GD.Print("Button pressed!");
}
}
Рустам АбдрашитовМыслитель (8667)
1 месяц назад
Изменения и улучшения:
Удаление лишней переменной: Мы убрали переменную button, так как вы можете напрямую подключить сигнал pressed к методу OnButtonPressed.
Использование private: Метод OnButtonPressed теперь имеет модификатор доступа private, так как он не должен быть доступен извне.
Упрощение подключения сигнала: Теперь сигнал подключается сразу в методе _Ready(), что делает код более чистым и понятным.
using System;
public class ButtonHandler : Button
{
public override void _Ready()
{
Button button = GetNode<Button>("Button");
button.Connect("pressed", this, nameof(OnButtonPressed));
}
public void OnButtonPressed()
{
GD.Print("Button pressed!");
}
}
выдает ошибку E 0:00:00.493 can_instance: Cannot instance script because the class 'Button' could not be found. Script: 'res://Button.cs'.
<Ошибка C++> Method failed. Returning: __null
<Исходный код C++>modules/mono/csharp_script.cpp:2891 @ can_instance()
Кнопка называется Button