Написание скриптов в Godot на C#. Введение
Введение
Поддержка C # - это новая функция в Godot 3.0. Таким образом, вы все еще можете столкнуться с некоторыми проблемами или найти места, где документация может быть улучшена. Пожалуйста, сообщайте о проблемах с C# в Godot на странице движка Github. И любые проблемы с документацией на странице документации Github.
На этой странице приведено краткое введение в C#, что это такое и как его использовать в Godot. После этого вы можете посмотреть, как использовать определенные функции, прочитать о различиях между C# и GDScript API и (повторно) посетить раздел «Скрипты» в пошаговом руководстве.
C# - это язык программирования высокого уровня, разработанный Microsoft. В Godot это реализовано с платформой Mono 5.x .NET, включая полную поддержку C# 7.0. Mono - это реализация Microsoft .NET Framework с открытым исходным кодом, основанная на стандартах ECMA для C# и Common Language Runtime. Хорошей отправной точкой для проверки его возможностей является страница «Совместимость» в документации Mono.
ПРИМЕЧАНИЕ: Это не полномасштабное руководство по языку C# в целом. Если вы еще не знакомы с его синтаксисом или функциями, обратитесь к руководству по Microsoft C# или найдите подходящее введение в другом месте.
Установка C# в Godot
Скачайте и установите Mono SDK
Если вы используете Godot 3.0.2, вы должны будете скачать Mono 5.4.
Godot 3.0.3+ требует Mono 5.12 (на любой платформе)
ПРИМЕЧАНИЕ: Чтобы скачать Mono v5.12+ на Mac, найдите ссылку «Стабильный канал» на странице загрузок Mono. Канал Visual Studio является более ранней версией Mono и не будет работать с Godot 3.0.3+.
Вам также будет нужен MSBuild (по крайней мере, версия 15.0), который должен поставляться с Mono.
ПРИМЕЧАНИЕ: Инструкции по установке более старых версий Mono в Linux см. на этой странице. Более старые версии Mono для macOS и Windows можно найти здесь.
Кроме того, в вашей версии Godot должна быть включена поддержка Mono, поэтому убедитесь, что вы загружаете версию Godot Mono.
Если вы собираете Godot из исходного кода, обязательно следуйте инструкциям по включению поддержки Mono в вашу сборку, описанным на странице Компиляция с Mono.
Таким образом, вы должны установить 1) правильную версию Mono SDK для вашей версии Godot и 2) версию Godot Mono.
Настройка внешнего редактора
Хотя у Godot есть собственный редактор скриптов, его поддержка C# поддерживается на минимальном уровне, и рекомендуется использовать внешнюю IDE или редактор, например Microsoft Visual Studio Code или MonoDevelop, которые предоставляют автозаполнение, отладку и другие полезные функции при работе с C#. Чтобы настроить его, в Godot нажмите «Редактор», затем «Настройки редактора». Прокрутите вниз до настроек «Mono». Под Mono нажмите «Редактор», и на этой странице выберите свой внешний редактор.
ПРИМЕЧАНИЕ: Если вы используете Visual Studio Code, убедитесь, что вы загрузили и установили расширение .NET tools. Без этого Godot получит ошибку при попытке создать новый проект или отредактировать скрипт на C#.
Создание скрипта на C#
После того, как вы успешно настроили C# для Godot, вы должны увидеть следующую опцию при выборе «Прикрепить скрипт» в контекстном меню узла в вашей сцене:
Обратите внимание, что хотя некоторые особенности меняются, большинство вещей работают одинаково при использовании C#. Если вы новичок в Godot, вы можете просмотреть туториалы на "Написание сценариев (скриптов)" на этом этапе. Хотя в некоторых местах документации все еще отсутствуют примеры C#, большинство вещей можно легко перенести из GDScript.
Создание проекта и процесс работы
Когда вы создаете первый скрипт C#, Godot инициализирует файлы проекта C# для вашего проекта Godot. Это включает в себя создание решения C# (.sln
) и файла проекта (.csproj
), а также некоторых служебных файлов и папок (.mono
, иногда Properties
). Все они, кроме .mono
, важны и должны храниться в вашей системе контроля версий. .mono
может быть безопасно добавлен в список игнорирования вашего VCS (Система управления версиями). Для устранения неполадок иногда может помочь удаление папки .mono
и ее востановление.
Обратите внимание, что в настоящее время есть некоторые проблемы, когда Godot и проект C# не синхронизированы; если вы удаляете, переименовываете или перемещаете объекты, такие как сценарии или узлы, они могут больше не совпадать. Для решения этой проблемы может помочь редактирование файла решения вручную.
Пример: если вы создали сценарий (например, Test.cs
) и удалили его в Godot, компиляция завершится неудачно, поскольку теперь ожидается, что отсутствующий файл все еще будет находиться в проекте CS. Сейчас вы можете просто открыть файл .csproj
и найти ItemGroup
, там должна быть строка, подобная следующей:
<ItemGroup> <Compile Include="Test.cs" />`` <— Вот она <Compile Include="AnotherTest.cs" />`` </ItemGroup>
Просто удалите эту строку, и ваш проект должен снова заработать. То же самое работает при переименовании и перемещении объектов, просто переименуйте и переместите их в файл проекта, если это необходимо.
Пример
Вот пустой C# скрипт с некоторыми коммен��ариями, чтобы продемонстрировать, как он работает.
using Godot; using System; public class YourCustomClass : Node { // Member variables here, example: private int a = 2; private string b = "textvar"; public override void _Ready() { // Called every time the node is added to the scene. // Initialization here. GD.Print("Hello from C# to Godot :)"); } public override void _Process(float delta) { // Called every frame. Delta is time since the last frame. // Update game logic here. } }
Как вы видите, вещи, которые обычно находятся в Global Scope в GDScript, такие как Godot функция print, доступны в пространстве имен GD. Список их см. на справочных страницах классов для @GDScript и @GlobalScope.
ПРИМЕЧАНИЕ: Имейте в виду, что класс, который вы хотите присоединить к вашему узлу, должен называться как файл .cs. В противном случае вы получите следующую ошибку и не сможете запустить сцену: «Cannot find class XXX for script res://XXX.cs.».
Основные отличия между C# и GDScript
API C# использует PascalCase
вместо snake_case
в GDScript/C++. Где это возможно, поля и методы get/set были преобразованы в свойства. В целом, C# Godot API стремится быть настолько идиоматичным, насколько это возможно.
Для подробностей см. страницу API differences to GDScript
Текущие ошибки и известные проблемы
Поскольку поддержка C# является довольно новой для Godot, есть некоторые проблемы с развитием и вещи, которые все еще необходимо устранить. Ниже приведен список наиболее важных проблем, о которых вы должны знать при погружении в C# в Godot, но, если сомневаетесь, взгляните также на официальный трекер ошибок для проблем Mono.
- Как объяснялось выше, проект C # не всегда автоматически синхронизируется при удалении, переименовании или перемещении объектов в Godot (#12917)
- Написание плагинов редактора и инструментальных скриптов на C# пока не поддерживается
- Экспорт Mono проектов поддерживается только для настольных платформ (Linux, Windows и macOS). HTML5, Android, iOS и UWP в настоящее время не поддерживаются (#18364 comment)
- Присоединенные сценарии C# должны ссылаться на класс, имя которого соответствует имени файла и является уникальным в сборке проекта. (#7402 comment)
(от автора перевода: ну, для шарповцев это не новинка)
Производительность C# в Godot
Согласно некоторым тестам производительности (бенчмаркам), производительность C# в Godot - хотя обычно в одной и той же величине - примерно в 4 раза выше, чем у GDScript в некоторых простых случаях. Для самой высокой производительности C++ все еще немного быстрее; особенности будут варьироваться в зависимости от вашего варианта использования. GDScript, вероятно, достаточно быстрый для большинства общих сценариев рабочих нагрузок. C# быстрее, но требует некоторой дорогой подготовки при использовании с Godot.
Использование NuGet пакетов в Godot
Пакеты Nuget можно устанавливать и использовать с Godot, как и в любом проекте. Многие IDE (такие как VS Code) могут добавлять пакеты напрямую. Их также можно добавить вручную, добавив ссылку на пакет в файле .csproj, расположенном в корне проекта:
<ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="11.0.2"/> <— Вот так </ItemGroup> ... </Project>
Всякий раз, когда пакеты добавляются или изменяются, запускайте восстановление NuGet в корне каталога проекта, и чтобы убедиться, что пакеты NuGet будут доступны для использования MSBuild, запустите:
$ msbuild /t:restore