Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

GODOT C# не работает скрипт

Ярослав Власов Знаток (363), на голосовании 2 недели назад
using Godot;
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
Голосование за лучший ответ
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(), что делает код более чистым и понятным.
Похожие вопросы