Parcourir la source

Обновить 'Лекции/GDScript/GDScript_Di.md'

u20masarova il y a 1 semaine
Parent
commit
9ff9f055f1
1 fichiers modifiés avec 160 ajouts et 0 suppressions
  1. 160 0
      Лекции/GDScript/GDScript_Di.md

+ 160 - 0
Лекции/GDScript/GDScript_Di.md

@@ -2,3 +2,163 @@
 
 ![gds.png](gds.png)
 
+
+### GDScript — это высокоуровневый, динамически типизированный (с поддержкой опциональной статической типизации) объектно-ориентированный язык программирования, созданный специально для игрового движка Godot Engine. Его синтаксис во многом вдохновлен Python, что делает код чистым, читаемым и лаконичным. 
+
+В отличие от языков общего назначения, GDScript не существует отдельно от своего движка. Он разработан с одной целью: максимально быстро и удобно писать код для игр в экосистеме Godot.
+
+
+## Плюсы и минусы GDScript (в современных реалиях).
+### Плюсы:
+* Идеальная интеграция с движком: язык «из коробки» понимает архитектуру Godot. Работа с узлами (Nodes), сценами, векторами и сигналами (событиями) интуитивно понятна и требует минимум кода.
+* Мгновенная компиляция и быстрая итерация: код не нужно долго компилировать. Вы вносите изменения, нажимаете «Воспроизвести» и сразу видите результат. Это значительно ускоряет создание прототипов.
+* Низкий порог вхождения: благодаря синтаксису, похожему на синтаксис Python, язык очень прост в освоении. Отсутствие фигурных скобок и лишней «воды» (бойлерплейта) позволяет сосредоточиться на логике игры.
+* Опциональная статическая типизация (в GDScript 2.0): вы можете указывать типы переменных (например, var speed: float = 10.0). В наше время это огромный плюс: это ускоряет работу самого языка и позволяет автодополнению в редакторе работать безошибочно.
+* Встроенный редактор: код пишется прямо в Godot. Вам не нужно настраивать тяжелые внешние IDE вроде Visual Studio или Rider (хотя при желании можно использовать VS Code).
+
+### Минусы:
+* Производительность вычислений: поскольку это интерпретируемый язык, сложные математические вычисления, генерация процедурных миров «на лету» или обработка десятков тысяч объектов одновременно (например, в стратегии в реальном времени) на GDScript будут выполняться заметно медленнее, чем на компилируемых языках (C# или C++). 
+* Узкая специализация (вендор-лок): знание GDScript применимо только в Godot. Вы не сможете написать на нем бэкенд для веб-сайта или скрипт для автоматизации системы. 
+* Сложности рефакторинга в крупных проектах: несмотря на появление типизации, язык остается динамическим. В проектах уровня ААА с сотнями тысяч строк кода отслеживать связи и проводить глобальный рефакторинг на GDScript сложнее, чем на строгом C#. 
+* Ограниченная экосистема сторонних библиотек: в отличие от Python или C#, вы не можете просто скачать из интернета библиотеку для интеграции сложной нейросети или специфической базы данных без дополнительных усилий (часто для этого приходится писать модули на C++). 
+
+
+## Для кого подходит этот язык?
+
+* Инди-разработчики и сольные творцы: для тех, кому нужно быстро реализовать идею без сложной архитектуры. 
+* Новички в GameDev: Идеальный старт для тех, кто никогда раньше не программировал. 
+* Участники Game Jams: Когда на создание игры есть всего 48 часов, скорость написания кода на GDScript спасает ситуацию. 
+* Технические художники и геймдизайнеры: Язык настолько прост, что люди, далекие от хардкорного программирования, могут сами настраивать логику поведения персонажей, пользовательский интерфейс и анимацию.
+
+## Сравнение GDScript с другими языками в Godot.
+
+Godot Engine официально поддерживает несколько языков. Вот как выглядит GDScript на их фоне:
+
+![gdst.png](gdst.png)
+
+
+###### Важный нюанс: многие путают GDScript с Python. Синтаксически они похожи, как братья, но по сути это разные языки. В GDScript нет сборщика мусора (используется подсчет ссылок), и он не имеет огромной стандартной библиотеки Python.
+######
+
+Давайте разберем синтаксис GDScript на практике и сравним его с C#, чтобы наглядно увидеть, почему многие разработчики предпочитают встроенный язык Godot для написания игровой логики.
+
+В качестве примера возьмем самую классическую задачу — базовое передвижение и прыжок 2D-персонажа (с учетом гравитации). Мы будем использовать современный синтаксис Godot 4. 
+
+### 1. Перемещение персонажа с помощью GDScript.
+Вот как выглядит стандартный скрипт для узла CharacterBody2D, отвечающего за физическое перемещение персонажа в платформере:
+```
+extends CharacterBody2D
+
+const SPEED: float = 300.0
+const JUMP_VELOCITY: float = -400.0
+
+# Получаем значение гравитации из глобальных настроек проекта
+var gravity: float = ProjectSettings.get_setting("physics/2d/default_gravity")
+
+func _physics_process(delta: float) -> void:
+    # 1. Применяем гравитацию, если персонаж не на полу
+    if not is_on_floor():
+        velocity.y += gravity * delta
+
+    # 2. Обработка прыжка (клавиша Пробел или стрелка вверх)
+    if Input.is_action_just_pressed("ui_accept") and is_on_floor():
+        velocity.y = JUMP_VELOCITY
+
+    # 3. Получаем направление движения (-1 для влево, 1 для вправо, 0 если стоим)
+    var direction: float = Input.get_axis("ui_left", "ui_right")
+    
+    if direction:
+        velocity.x = direction * SPEED
+    else:
+        # Плавная остановка, если кнопки не нажаты
+        velocity.x = move_toward(velocity.x, 0, SPEED)
+
+    # 4. Применяем вычисленную скорость и двигаем персонажа
+    move_and_slide()
+```
+
+### Особенности синтаксиса GDScript, которые здесь видны:
+
+* Нет фигурных скобок {} и точек с запятой ;: блоки кода выделяются отступами (табуляцией), как в Python. Это делает код визуально «воздушным» и заставляет разработчика писать аккуратно.
+* Ключевые слова var и func: используются для объявления переменных и функций соответственно.
+* Статическая типизация (опционально): записи вида : float или -> void помогают движку и вам избегать ошибок, хотя код работал бы и без них.
+* Прямой доступ к свойствам узла: переменная velocity (текущая скорость) доступна напрямую, так как скрипт наследует (extends) класс CharacterBody2D.
+
+### 2. Тот же код на C#.
+А теперь посмотрим, как та же логика реализуется в Godot с использованием C#: 
+
+```
+using Godot;
+using System;
+
+public partial class Player : CharacterBody2D
+{
+    public const float Speed = 300.0f;
+    public const float JumpVelocity = -400.0f;
+
+    // Получаем гравитацию и явно приводим её к типу float
+    public float Gravity = ProjectSettings.GetSetting("physics/2d/default_gravity").AsSingle();
+
+    public override void _PhysicsProcess(double delta)
+    {
+        // В C# мы должны создать локальную копию вектора скорости
+        Vector2 velocity = Velocity;
+
+        // 1. Применяем гравитацию
+        if (!IsOnFloor())
+        {
+            velocity.Y += Gravity * (float)delta;
+        }
+
+        // 2. Обработка прыжка
+        if (Input.IsActionJustPressed("ui_accept") && IsOnFloor())
+        {
+            velocity.Y = JumpVelocity;
+        }
+
+        // 3. Получаем направление
+        float direction = Input.GetAxis("ui_left", "ui_right");
+        
+        if (direction != 0)
+        {
+            velocity.X = direction * Speed;
+        }
+        else
+        {
+            velocity.X = Mathf.MoveToward(Velocity.X, 0, Speed);
+        }
+
+        // 4. Возвращаем измененный вектор обратно в свойство Velocity и двигаем
+        Velocity = velocity;
+        MoveAndSlide();
+    }
+}
+```
+
+### Сравнивая эти два фрагмента кода, можно выделить несколько ключевых моментов: 
+
+* Бойлерплейт (избыточный код): C# требует гораздо больше «обвязки». Нужны директивы using, объявление класса (public partial class), модификаторы доступа (public, override). В GDScript файл скрипта сам по себе является классом, и это скрыто от пользователя.
+* Стиль написания (соглашения об именовании):в GDScript принято использовать snake_case (слова через подчеркивание: move_and_slide, is_on_floor), в C# используется PascalCase (каждое слово с заглавной буквы: MoveAndSlide, IsOnFloor).
+* Работа со свойствами: в C# (начиная с Godot 4) свойства вроде Velocity являются структурами. Вы не можете просто написать Velocity.Y += 10. Вам нужно скопировать вектор в локальную переменную, изменить его, а затем переназначить обратно (Velocity = velocity). GDScript делает это автоматически, что значительно упрощает работу.
+* Приведение типов: в C# требуется строгое приведение типов (кастинг). Например, дельта времени в C# имеет тип double, а гравитация — float, поэтому нужно писать (float)delta. Кроме того, настройку гравитации нужно явно распаковывать с помощью .AsSingle(). В GDScript типизация менее строгая.
+
+### Итог сравнения
+Если вам нужно реализовать механику движения, GDScript позволит сделать это быстрее, код займет меньше строк и будет читаться как обычный текст. Однако если бы мы писали алгоритм генерации бесконечного мира с использованием многопоточности, строгий синтаксис и производительность C# были бы гораздо предпочтительнее.
+
+
+## Применение в наше время и подходящие проекты.
+
+В 2023–2024 годах, после скандалов, связанных с изменением ценовой политики Unity, Godot пережил взрывной рост популярности. GDScript стал основным инструментом для тысяч студий, перешедших на этот движок.
+
+Как это применяется сейчас: современный подход в Godot — комбинирование языков. Разработчики используют GDScript для 80–90 % проекта (управление персонажем, интерфейс, диалоги, квесты), а сложные алгоритмы (например, алгоритм поиска пути A* для тысячи врагов) пишут на C# или C++.
+
+**В каких проектах GDScript проявляет себя лучше всего:**
+1. 2D-игры (платформеры, метроидвании): GDScript идеально подходит для работы с физикой и логикой 2D-игр. Примеры известных игр на Godot: Cruelty Squad, Dome Keeper, Brotato, Cassette Beasts — в большинстве из них активно используется GDScript.
+2. Рогалики (Rogue-like / Rogue-lite): на этом языке легко писать генерацию уровней средней сложности и управление инвентарем.
+3. Игры с упором на сюжет и пользовательский интерфейс (визуальные новеллы, карточные игры): лучшего инструмента для управления состояниями кнопок, окон и текста не придумаешь.
+4. Настольные неигровые приложения: Удивительно, но на Godot создают много софта (например, программу для пиксель-арта Pixelorama или инструмент для анимации RPG in a Box). GDScript отлично подходит для создания сложных пользовательских интерфейсов.
+5. Мобильные игры: казуальные и гиперказуальные проекты безупречно работают на GDScript.
+
+## Вывод.
+
+GDScript — прагматичный инструмент. Он не претендует на звание самого быстрого или универсального языка в мире. Его сила — в филигранной подстройке под нужды движка Godot. Если ваша цель — создать игру, а не строить сложные программные архитектуры ради самих архитектур, GDScript сэкономит вам сотни часов времени.