10 промтов для GameDev: Unity, Unreal Engine и Godot — от концепта до прототипа

Введение

Разработка игр — это сложный, многоэтапный процесс, где каждый день приходится решать десятки задач: от написания скриптов до настройки физики. С появлением больших языковых моделей (LLM) вроде GPT-4 и Claude 3.5 у гейм-дизайнеров и программистов появился мощный инструмент, который может генерировать код, сценарии и даже архитектуру игровых механик. Однако, как показывает практика, качество ответа напрямую зависит от того, как сформулирован промт.

В этой подборке я собрал 10 проверенных промтов для трёх популярных движков: Unity (C#), Unreal Engine (Blueprints) и Godot (GDScript). Каждый промт сопровождается реальным примером использования, кодом и разбором результата. Статья рассчитана на разработчиков любого уровня — от новичков до экспертов.

1. Базовый промт: Создание скрипта движения персонажа в Unity

Задача: Сгенерировать скрипт для движения персонажа от первого лица с поддержкой прыжка и приземления.

Промт: Напиши скрипт C# для Unity, реализующий движение персонажа от первого лица. Используй CharacterController. Добавь прыжок с проверкой на земле. Настрой чувствительность мыши для поворота камеры. Обработай случай, когда игрок падает с высоты.

Пример результата:

using UnityEngine;

public class FirstPersonController : MonoBehaviour
{
    public float walkSpeed = 5f;
    public float runSpeed = 10f;
    public float jumpForce = 8f;
    public float mouseSensitivity = 2f;

    private CharacterController controller;
    private Vector3 velocity;
    private float xRotation = 0f;
    private bool isGrounded;

    void Start()
    {
        controller = GetComponent<CharacterController>();
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        // Поворот камеры
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity;
        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);
        Camera.main.transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
        transform.Rotate(Vector3.up * mouseX);

        // Движение
        isGrounded = controller.isGrounded;
        if (isGrounded && velocity.y < 0) velocity.y = -2f;

        float speed = Input.GetKey(KeyCode.LeftShift) ? runSpeed : walkSpeed;
        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");
        Vector3 move = transform.right * x + transform.forward * z;
        controller.Move(move * speed * Time.deltaTime);

        // Прыжок
        if (Input.GetButtonDown("Jump") && isGrounded)
        {
            velocity.y = Mathf.Sqrt(jumpForce * -2f * Physics.gravity.y);
        }

        velocity.y += Physics.gravity.y * Time.deltaTime;
        controller.Move(velocity * Time.deltaTime);
    }
}

Результат: Полноценный контроллер, который можно сразу вставить в сцену. Скрипт использует CharacterController — стандартный компонент Unity (документация: Unity Manual — CharacterController). Важно: промт явно указал проверку на земле и прыжок — AI корректно обработал эти условия.

2. Промт для Blueprints в Unreal Engine: Система здоровья

Задача: Создать Blueprint для персонажа с системой здоровья, урона и смерти.

Промт: Создай Blueprint для персонажа в Unreal Engine 5. Добавь переменную Health (float) с начальным значением 100. Реализуй функцию TakeDamage, которая уменьшает Health на величину урона. Если Health <= 0, вызывай событие Death. Также добавь возможность восстановления здоровья через функцию Heal.

Пример реализации (текстовое описание логики):

  1. Создайте Blueprint Class от Character.
  2. В графе событий добавьте переменную Health (float, Default = 100).
  3. Создайте пользовательский событие TakeDamage с входным параметром DamageAmount.
  4. Внутри события:
  5. Узел Subtract (Health — DamageAmount).
  6. Узел Set Health.
  7. Узел Branch с условием Health <= 0.
  8. При true: вызвать событие Death (можно через Print String или Destroy Actor).
  9. Создайте событие Heal с параметром HealAmount:
  10. Узел Add (Health + HealAmount).
  11. Узел Clamp (0–100), чтобы не превысить максимум.
  12. Узел Set Health.

Результат: Готовая система здоровья, которую можно расширить (например, добавить регенерацию или типы урона). Промт сработал хорошо, но для более сложной логики (например, критические удары) потребуется уточнение.

3. Промт для Godot: Скрипт стрельбы пулями

Задача: Создать скрипт на GDScript для стрельбы пулями из оружия с таймером перезарядки.

Промт: Напиши скрипт на GDScript для Godot 4. Создай узел Area2D для пули, которая движется вперёд и уничтожается при столкновении. Для оружия используй Timer для задержки между выстрелами. При нажатии Space создавай экземпляр пули.

Пример результата:

# Bullet.gd
extends Area2D

var speed: float = 500.0

func _ready():
    # Подключаем сигнал столкновения
    body_entered.connect(_on_body_entered)
    # Таймер для автоудаления
    var timer = Timer.new()
    timer.wait_time = 2.0
    timer.one_shot = true
    timer.timeout.connect(queue_free)
    add_child(timer)
    timer.start()

func _process(delta):
    position += Vector2.RIGHT * speed * delta

func _on_body_entered(body):
    queue_free()

# Weapon.gd
extends Node2D

@export var bullet_scene: PackedScene
var can_shoot: bool = true

func _ready():
    var timer = Timer.new()
    timer.wait_time = 0.3
    timer.one_shot = false
    timer.timeout.connect(_on_timer_timeout)
    add_child(timer)
    timer.start()

func _input(event):
    if event.is_action_pressed("shoot") and can_shoot:
        var bullet = bullet_scene.instantiate()
        bullet.position = position
        get_parent().add_child(bullet)
        can_shoot = false
        await get_tree().create_timer(0.3).timeout
        can_shoot = true

func _on_timer_timeout():
    pass  # Можно использовать для других целей

Результат: Рабочая стрельба с перезарядкой. Промт задал чёткие требования — AI выбрал Area2D для коллизий и Timer для задержки. Это следует из документации Godot: Godot Docs — Area2D.

4. Продвинутый промт: Система инвентаря в Unity

Задача: Сгенерировать архитектуру для системы инвентаря с поддержкой предметов, стекирования и UI.

Промт: Разработай архитектуру системы инвентаря для Unity. Используй ScriptableObject для предметов. Создай класс Inventory с словарём предметов и методом AddItem. Реализуй UI с сеткой ячеек. Предметы могут стакаться (макс 99). Напиши код на C#.

Пример результата (фрагмент):

// Item.cs
[CreateAssetMenu(fileName = "New Item", menuName = "Inventory/Item")]
public class Item : ScriptableObject
{
    public string itemName;
    public Sprite icon;
    public int maxStack = 99;
}

// Inventory.cs
public class Inventory : MonoBehaviour
{
    public Dictionary<Item, int> items = new Dictionary<Item, int>();

    public bool AddItem(Item item, int amount = 1)
    {
        if (items.ContainsKey(item))
        {
            int current = items[item];
            if (current + amount <= item.maxStack)
            {
                items[item] = current + amount;
                return true;
            }
            else
            {
                Debug.Log("Stack full");
                return false;
            }
        }
        else
        {
            items.Add(item, amount);
            return true;
        }
    }
}

Результат: Архитектура, которую легко расширять (добавить удаление, слоты экипировки). Промт явно указал ScriptableObject — это стандартный подход в Unity (см. Unity Learn — ScriptableObject).

5. Промт для оптимизации: Процедурная генерация уровня в Godot

Задача: Создать скрипт для генерации лабиринта с помощью алгоритма поиска в глубину.

Промт: Напиши скрипт на GDScript для Godot 4, который генерирует лабиринт с использованием DFS (Depth-First Search). Используй TileMap. Размер лабиринта задаётся через экспортные переменные. Стены и пол — разные тайлы.

Пример результата (фрагмент):

extends TileMap

@export var width: int = 10
@export var height: int = 10

var grid: Array = []

func _ready():
    generate_maze()

func generate_maze():
    # Инициализация сетки
    for x in range(width):
        grid.append([])
        for y in range(height):
            grid[x].append(true)  # true = стена

    # DFS
    var stack = []
    var start = Vector2(1, 1)
    grid[start.x][start.y] = false
    stack.push_back(start)

    while stack.size() > 0:
        var current = stack.back()
        var neighbors = get_neighbors(current)
        if neighbors.size() > 0:
            var next = neighbors[randi() % neighbors.size()]
            grid[next.x][next.y] = false
            var between = (current + next) / 2
            grid[between.x][between.y] = false
            stack.push_back(next)
        else:
            stack.pop_back()

    # Отрисовка
    for x in range(width):
        for y in range(height):
            if grid[x][y]:
                set_cell(0, Vector2(x, y), 0, Vector2(0, 0))  # Стена
            else:
                set_cell(0, Vector2(x, y), 0, Vector2(1, 0))  # Пол

func get_neighbors(pos: Vector2) -> Array:
    var result = []
    var dirs = [Vector2(2, 0), Vector2(-2, 0), Vector2(0, 2), Vector2(0, -2)]
    for d in dirs:
        var new_pos = pos + d
        if new_pos.x > 0 and new_pos.x < width and new_pos.y > 0 and new_pos.y < height:
            if grid[new_pos.x][new_pos.y]:
                result.append(new_pos)
    return result

Результат: Генерация лабиринта за O(n). Промт указал конкретный алгоритм (DFS) — AI выбрал правильную реализацию. Это типовой подход, описанный в GDC Talk: Procedural Generation in Games.

6. Промт для Unreal Engine: AI Behaviour Tree

Задача: Создать поведение врага, который патрулирует, преследует игрока и атакует.

Промт: Создай Behaviour Tree для врага в Unreal Engine 5. Используй Blackboard с переменными TargetActor (Object), PatrolPoint (Vector). В Behaviour Tree: сначала патруль по точкам, при обнаружении игрока — преследование, если в радиусе 2 метров — атака. Напиши описание логики для каждого узла.

Пример реализации:

  1. Blackboard:
  2. TargetActor (Object)
  3. PatrolPoint (Vector)
  4. IsAttacking (Bool)

  5. Behaviour Tree:

  6. Root: Selector
    • Sequence: Attack
    • Condition: IsAttacking == true
    • Task: PlayMontage (анимация атаки)
    • Sequence: Chase
    • Task: FindPlayer (Service: проверка расстояния)
    • Task: MoveToActor (TargetActor)
    • Sequence: Patrol
    • Task: GetNextPatrolPoint
    • Task: MoveToLocation (PatrolPoint)

Результат: Поведение, готовое к интеграции. Промт задал чёткие условия — AI предложил правильную структуру. Документация: Unreal Engine — Behaviour Tree.

7. Промт для Unity: Система диалогов

Задача: Создать систему диалогов с выбором ответов.

Промт: Разработай систему диалогов для Unity. Используй ScriptableObject для хранения узлов диалога. Каждый узел содержит текст и список вариантов ответа. Реализуй UI с кнопками. Напиши код на C#.

Пример результата (фрагмент):

[System.Serializable]
public class DialogueOption
{
    public string text;
    public DialogueNode nextNode;
}

[CreateAssetMenu(fileName = "New Dialogue", menuName = "Dialogue/Node")]
public class DialogueNode : ScriptableObject
{
    public string speakerName;
    [TextArea] public string dialogueText;
    public DialogueOption[] options;
}

public class DialogueUI : MonoBehaviour
{
    public TextMeshProUGUI speakerText;
    public TextMeshProUGUI dialogueText;
    public GameObject optionPrefab;
    public Transform optionParent;

    public void ShowNode(DialogueNode node)
    {
        speakerText.text = node.speakerName;
        dialogueText.text = node.dialogueText;
        foreach (var option in node.options)
        {
            var btn = Instantiate(optionPrefab, optionParent);
            btn.GetComponentInChildren<TextMeshProUGUI>().text = option.text;
            btn.GetComponent<Button>().onClick.AddListener(() => ShowNode(option.nextNode));
        }
    }
}

Результат: Гибкая система, которую можно расширить (добавить звуки, анимации). Промт указал ScriptableObject — это стандарт для данных в Unity.

8. Промт для Godot: Партиклы для эффекта взрыва

Задача: Создать систему частиц для взрыва.

Промт: Создай сцену взрыва в Godot 4. Используй GPUParticles2D. Настрой: время жизни 0.5 сек, скорость 300, цвет оранжевый->прозрачный, количество 50 частиц. Добавь случайное вращение.

Пример результата (скрипт для GDScript):

extends GPUParticles2D

func _ready():
    # Настройки
    amount = 50
    lifetime = 0.5
    speed_scale = 1.0

    # Материал
    var material = ParticleProcessMaterial.new()
    material.direction = Vector3.UP
    material.spread = 180.0
    material.gravity = Vector3(0, -200, 0)
    material.initial_velocity_min = 200.0
    material.initial_velocity_max = 400.0
    material.color = Color(1.0, 0.5, 0.0)  # Оранжевый
    # Градиент цвета (оранжевый -> прозрачный)
    var gradient = Gradient.new()
    gradient.offsets = [0.0, 1.0]
    gradient.colors = [Color(1.0, 0.5, 0.0), Color(1.0, 0.5, 0.0, 0.0)]
    material.color_ramp = gradient

    # Вращение
    material.angle_min = 0.0
    material.angle_max = 360.0
    material.angular_velocity_min = -100.0
    material.angular_velocity_max = 100.0

    process_material = material
    emitting = true

Результат: Визуальный эффект взрыва. Промт задал все ключевые параметры — AI сгенерировал корректную конфигурацию.

9. Промт для оптимизации: LOD-система в Unity

Задача: Создать скрипт для автоматической генерации LOD-уровней.

Промт: Напиши скрипт C# для Unity, который автоматически создаёт LOD-группу для меша. Используй MeshSimplifier. Настрой три уровня: 100%, 60%, 30% полигонов.

Пример результата (фрагмент):

using UnityMeshSimplifier;

[RequireComponent(typeof(LODGroup))]
public class AutoLOD : MonoBehaviour
{
    public float[] qualityPercentages = { 1f, 0.6f, 0.3f };

    void Start()
    {
        var lodGroup = GetComponent<LODGroup>();
        var originalMesh = GetComponent<MeshFilter>().sharedMesh;
        var lods = new LOD[qualityPercentages.Length];

        for (int i = 0; i < qualityPercentages.Length; i++)
        {
            var simplifiedMesh = MeshSimplifier.Simplify(originalMesh, qualityPercentages[i]);
            var renderer = new GameObject("LOD" + i).AddComponent<MeshRenderer>();
            var filter = renderer.gameObject.AddComponent<MeshFilter>();
            filter.sharedMesh = simplifiedMesh;
            renderer.transform.SetParent(transform);
            lods[i] = new LOD(1f / (i + 1), new Renderer[] { renderer });
        }

        lodGroup.SetLODs(lods);
        lodGroup.RecalculateBounds();
    }
}

Результат: Экономия производительности. Промт использовал стороннюю библиотеку UnityMeshSimplifier (доступна на GitHub).

10. Экспертный промт: Архитектура для мультиплеера в Unity

Задача: Спроектировать архитектуру для мультиплеерной игры с использованием Netcode for GameObjects.

Промт: Спроектируй архитектуру мультиплеерной игры на Unity с Netcode. Используй NetworkBehaviour. Реализуй синхронизацию позиции игрока через NetworkTransform. Добавь RPC для стрельбы. Обработай лаг-компенсацию с помощью клиентского предсказания. Напиши код на C#.

Пример результата (фрагмент):

using Unity.Netcode;

public class PlayerController : NetworkBehaviour
{
    public override void OnNetworkSpawn()
    {
        if (IsOwner)
        {
            Camera.main.transform.SetParent(transform);
            Camera.main.transform.localPosition = new Vector3(0, 1.6f, 0);
        }
    }

    [ClientRpc]
    public void ShootClientRpc(Vector3 hitPoint)
    {
        // Визуализация выстрела на всех клиентах
        Instantiate(bulletImpactPrefab, hitPoint, Quaternion.identity);
    }

    void Update()
    {
        if (!IsOwner) return;
        // Клиентское предсказание
        HandleInput();
    }

    [ServerRpc]
    public void SubmitInputServerRpc(InputData input)
    {
        // Серверная валидация
        ApplyMovement(input);
    }
}

Результат: Архитектура для сетевой игры. Промт охватил ключевые концепции: RPC, синхронизацию, предсказание. Документация: Unity Netcode.

Заключение

Мы разобрали 10 промтов для Unity, Unreal Engine и Godot — от простого движения до мультиплеера. Ключевой вывод: качество результата напрямую зависит от детализации запроса. Указывайте движок, версию, конкретные компоненты (например, CharacterController, GPUParticles2D), и AI выдаст рабочий код.

Попробуйте использовать эти промты в своей работе. Начните с базовых — например, скрипта движения или системы здоровья. Постепенно переходите к сложным задачам, добавляя свои условия. Помните: AI — это инструмент, который ускоряет разработку, но не заменяет понимания архитектуры. Удачи в геймдеве!

← Все статьи

Комментарии

Читайте также

12 промтов для Low-Code / No-Code: Airtable, Bubble, Retool

16 июля 2026

Архитектура независимого умного дома: паттерны аппаратного проектирования и Embedded-разработка на ESP32

16 июля 2026

Как я перестал тонуть в алгоритмах: курс «Алгоритмы и структуры данных» на asibiont.com и подготовка к FAANG за 8 недель

16 июля 2026

AI-агент для финансов: как интеграция с ЮKassa автоматизирует приём платежей и отчётность

16 июля 2026

SPI-интеграция с AI-агентом ASI Biont: пошаговый гайд по подключению сенсоров и дисплеев

16 июля 2026

Интеграция датчика давления BME280/BMP280 с AI-агентом ASI Biont: мониторинг и управление через MQTT

16 июля 2026

Wildberries и Ozon — Электронная коммерция: Как ИИ трансформирует обучение продавцов на Asibiont.com

16 июля 2026

Soft Skills и Карьера: Почему AI-обучение на Asibiont — ваш билет к росту дохода в 2026

16 июля 2026

Мастер-класс по международному налоговому планированию в эпоху Pillar Two: почему структурированный курс с ИИ превосходит самостоятельное обучение

16 июля 2026