12 промтов для GameDev: от базовых сценариев до экспертных механик в Unity, Unreal Engine и Godot

Введение

Промты для AI — это не просто шаблонные запросы, а мощный инструмент, сокращающий время на написание кода, поиск багов и реализацию сложных механик. Особенно это актуально в GameDev, где каждая минута на счету. В этой подборке мы собрали 12 промтов для Unity (C#), Unreal Engine (Blueprints) и Godot (GDScript), сгруппированных по уровню сложности. Каждый промт снабжён задачей, самим запросом и примером результата. Все примеры основаны на официальной документации: Unity Scripting API, Unreal Engine Blueprints, Godot GDScript.

Базовые промты

Промт 1: Простое движение персонажа в Unity (C#)

Задача: Создать скрипт для передвижения персонажа с помощью WASD с учётом скорости и дельты времени.

Промт: «Напиши скрипт на C# для Unity, который реализует движение персонажа (Transform) по осям X и Z с помощью WASD. Используй Input.GetAxis, скорость speed (public float) и Time.deltaTime. Добавь ограничение поворота — персонаж всегда смотрит в направлении движения. Используй Quaternion.LookRotation.»

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

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float speed = 5f;

    void Update()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        Vector3 dir = new Vector3(h, 0, v).normalized;
        if (dir.magnitude > 0.1f)
        {
            transform.Translate(dir * speed * Time.deltaTime, Space.World);
            transform.rotation = Quaternion.LookRotation(dir);
        }
    }
}

Источник: Unity Documentation - Input.GetAxis

Промт 2: Простая стрельба в Unreal Engine (Blueprints)

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

Промт: «Создай Blueprint для стрельбы из оружия от лица игрока в Unreal Engine. При нажатии на левую кнопку мыши необходимо выполнить LineTrace из камеры на расстояние 1000 см. Если луч попадает в объект с тегом "Enemy", нанести урон 20 (через Apply Damage). В противном случае заспавнить на конце луча статический меш — шар (Sphere Static Mesh) с физикой, который исчезает через 2 секунды. Используй GetPlayerCameraManager, LineTraceByChannel, SpawnActor.»

Пример результата:
- На событие Left Mouse ButtonLineTraceByChannel (Start = Camera Location, End = Camera Location + (Forward Vector * 1000)).
- Branch на Return Value → если hit, то Apply Damage (Target = Hit Actor, Damage = 20).
- Иначе SpawnActor (Class = BP_Projectile) в локации Hit Location с коллизией.
- DestroyActor (Target = Projectile, Delay = 2).

Источник: Unreal Blueprints - LineTrace

Промт 3: Прыжок персонажа в Godot (GDScript)

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

Промт: «Напиши скрипт на GDScript для узла CharacterBody3D в Godot. Добавь переменную jump_velocity (9.8) и gravity (ProjectSettings). В методе _physics_process обработай прыжок при нажатии Space и проверку is_on_floor. Используй Input.is_action_just_pressed и move_and_slide.»

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

extends CharacterBody3D

@export var speed = 5.0
@export var jump_velocity = 9.8
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")

func _physics_process(delta):
    if not is_on_floor():
        velocity.y -= gravity * delta
    if Input.is_action_just_pressed("ui_accept") and is_on_floor():
        velocity.y = jump_velocity
    var input_dir = Input.get_vector("move_left", "move_right", "move_forward", "move_back")
    velocity.x = input_dir.x * speed
    velocity.z = input_dir.y * speed
    move_and_slide()

Источник: Godot Docs - CharacterBody3D

Промт 4: Взаимодействие с объектами (собирание предметов) в Unity

Задача: Создать скрипт для поднятия объектов через Raycast и UI-подсказку.

Промт: «Напиши скрипт на C# для Unity: при наведении прицела (Camera.ScreenPointToRay) на объект с тегом "Pickup" и нажатии E объект уничтожается, а в UI Text изменяется счётчик. Используй Physics.Raycast, OnTriggerEnter (для триггера подбора).»

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

public class PickUp : MonoBehaviour
{
    public Text uiText;
    private int count = 0;
    void Update()
    {
        Ray ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width/2, Screen.height/2, 0));
        if (Physics.Raycast(ray, out RaycastHit hit, 3f))
        {
            if (hit.collider.CompareTag("Pickup") && Input.GetKeyDown(KeyCode.E))
            {
                Destroy(hit.collider.gameObject);
                count++;
                uiText.text = "Счёт: " + count;
            }
        }
    }
}

Источник: Unity Docs - Physics.Raycast

Продвинутые промты

Промт 5: Система инвентаря с UI в Unity

Задача: Реализовать инвентарь, который отображает иконки предметов в Grid Layout Group.

Промт: «Создай систему инвентаря на C# для Unity. Используй ScriptableObject для определения предметов (ID, name, icon). Инвентарь — это список ItemSO. При подборе предмета вызывай AddItem, который добавляет предмет и обновляет UI (создаёт Image в контейнере с GridLayoutGroup). Предметы можно перетаскивать через IBeginDragHandler.»

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

[CreateAssetMenu(fileName = "Item", menuName = "Inventory/Item")]
public class ItemSO : ScriptableObject
{
    public int id;
    public string itemName;
    public Sprite icon;
}

public class Inventory : MonoBehaviour
{
    public List<ItemSO> items = new List<ItemSO>();
    public GameObject slotPrefab;
    public Transform gridParent;
    public void AddItem(ItemSO item)
    {
        items.Add(item);
        GameObject slot = Instantiate(slotPrefab, gridParent);
        slot.GetComponent<Image>().sprite = item.icon;
    }
}

Источник: Unity ScriptableObject

Промт 6: AI-противник с патрулированием в Unreal Engine (Behavior Tree)

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

Промт: «Создай Behavior Tree для Unreal Engine врага: Blackboard с ключами PatrolPoint (Vector), TargetPlayer (Object). Sequence: Patrol → MoveTo (PatrolPoint) → Wait → Select. Второй бранч с Parallel: если PerceivesPlayer (PlayerController), то FocusOnPlayer и Attack (LineTrace). Используй EQS для выбора точки патруля.»

Пример результата:
- Blackboard: PatrolLocation (Vector), PlayerRef (Object).
- BT Root: Selector.
- Sequence 1 (Patrol): FindNextPatrolPoint (Service) — задаёт случайную навигационную точку → MoveTo (PatrolLocation) → Wait (2 sec).
- Sequence 2 (Combat): BBObject получить PlayerRefMoveTo (PlayerRef) → Attack (CustomTask: PlayMontage и LineTrace).
- Perception: AIPerceptionComponent (Sight) задаёт PlayerRef.

Источник: Unreal Behavior Tree

Промт 7: Система диалогов с ветвлением в Godot

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

Промт: «Напиши скрипт на GDScript для диалоговой системы Godot. JSON содержит ноды с text и options (массив объектов с text и next_id). При запуске загрузи JSON через FileAccess и парсь через JSON.parse(). Отображай текст в RichTextLabel, а варианты ответа — кнопками. При нажатии на кнопку переходи на next_id.»

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

# Пример JSON по пути res://dialogue.json
# {"start": {"text": "Привет!", "options": [{"text": "Кто ты?", "next_id": "q1"}]},
#  "q1": {"text": "Я страж", "options": []}}
extends Control

var data: Dictionary
var current_id = "start"

func _ready():
    var file = FileAccess.open("res://dialogue.json", FileAccess.READ)
    data = JSON.parse_string(file.get_as_text())
    show_dialogue(current_id)

func show_dialogue(id):
    $RichTextLabel.text = data[id].text
    for btn in $OptionContainer.get_children():
        btn.queue_free()
    for opt in data[id].options:
        var button = Button.new()
        button.text = opt.text
        button.pressed.connect(_on_option.bind(opt.next_id))
        $OptionContainer.add_child(button)

Источник: Godot JSON

Промт 8: Процедурная генерация подземелья в Unity (комнаты-коридоры)

Задача: Сгенерировать уровни из заранее заготовленных префабов комнат.

Промт: «Создай систему процедурной генерации на C# для Unity: заданный сид, количество комнат (например, 10). Список префабов комнат (Bounds). Алгоритм: случайно размещай комнаты без пересечений с помощью Physics.OverlapBox, затем соединяй их коридорами (Instantiate префаб коридора между ближайшими дверями). Используй случайный сид Random.InitState(seed).»

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

public class DungeonGenerator : MonoBehaviour
{
    public List<GameObject> roomPrefabs;
    public GameObject corridorPrefab;
    public int seed = 42;
    public int roomCount = 10;
    private List<Bounds> placedRooms = new List<Bounds>();

    void Start()
    {
        Random.InitState(seed);
        for (int i = 0; i < roomCount; i++)
        {
            Vector3 pos = new Vector3(Random.Range(-20,20),0, Random.Range(-20,20));
            GameObject room = Instantiate(roomPrefabs[Random.Range(0, roomPrefabs.Count)], pos, Quaternion.identity);
            Bounds b = new Bounds(pos, Vector3.one * 10);
            // проверка на пересечение пропущена для краткости
            placedRooms.Add(b);
        }
        // соединение коридорами
    }
}

Источник: Unity Physics.OverlapBox

Экспертные промты

Промт 9: Пул объектов для пуль в Unity (оптимизация)

Задача: Реализовать объектный пул для пуль, избегая Instantiate/Destroy.

Промт: «Напиши класс ObjectPool для Unity (C# Generic pool). При старте создай Queue. Когда нужна пуля — деактивируй и возвращай. Если очередь пуста — создай новый через Instantiate, но лучше предварительно загрузить n штук. Реализуй IPoolable интерфейс с Reset(). Используй корутину для деактивации пули через 5 секунд после выстрела.»

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

public class ObjectPool : MonoBehaviour
{
    public GameObject prefab;
    public int initialSize = 20;
    private Queue<GameObject> pool = new Queue<GameObject>();

    void Awake()
    {
        for (int i = 0; i < initialSize; i++)
        {
            GameObject obj = Instantiate(prefab);
            obj.SetActive(false);
            pool.Enqueue(obj);
        }
    }

    public GameObject Get()
    {
        if (pool.Count == 0)
        {
            GameObject obj = Instantiate(prefab);
            return obj;
        }
        GameObject pooled = pool.Dequeue();
        pooled.SetActive(true);
        return pooled;
    }

    public void Return(GameObject obj)
    {
        obj.SetActive(false);
        pool.Enqueue(obj);
    }
}
// Использование: BulletController через 5 сек вызывает ObjectPool.Return(gameObject)

Источник: Unity Patterns - Object Pooling

Промт 10: Save/Load с бинарной сериализацией в Godot

Задача: Сохранять состояние игры (позиция, инвентарь) в бинарный файл.

Промт: «Напиши скрипт SaveManager на GDScript для Godot. Используй FileAccess в режиме WRITE_READ для savegame.sav. Сохраняй Dictionary с позицией (Vector3) и списком предметов. При загрузке проверяй FileAccess.file_exists, читай, парсь через var data = bytes_to_var(file.get_buffer(file.get_length())). Используй @rpc для мультиплеера.»

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

func save_game():
    var data = {
        "position": $Player.position,
        "inventory": Global.inventory
    }
    var file = FileAccess.open("user://savegame.sav", FileAccess.WRITE)
    file.store_var(data)
    file.close()

func load_game():
    if not FileAccess.file_exists("user://savegame.sav"):
        return
    var file = FileAccess.open("user://savegame.sav", FileAccess.READ)
    var data = file.get_var()
    $Player.position = data["position"]
    Global.inventory = data["inventory"]
    file.close()

Источник: Godot FileAccess

Промт 11: Кастомная физика CharacterMovementComponent в Unreal Engine (замена, бег по стенам)

Задача: Реализовать движение по стенам (wall running) без стандартного CMC.

Промт: «Создай собственный UCharacterMovementComponent для Unreal Engine, наследующий от UCharacterMovementComponent. Переопредели PhysWalking и CheckWallRunning. Когда игрок в воздухе и нажимает Q, проверяй наличие стены слева/справа (SweepSingleByChannel). Если есть, меняй GravityScale на 0 и двигай вдоль стены, используя Custom Movement Mode. Добавь для этого кастомный метод OnStartWallRun.»

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

void UMyMovementComponent::PhysWalking(float deltaTime, int32 Iterations)
{
    Super::PhysWalking(deltaTime, Iterations);
    if (bWantsToWallRun && FindWallNormal().Z < 0.1f)
    {
        SetMovementMode(MOVE_Custom, CUSTOM_WALLRUN);
        Velocity = FVector::CrossProduct(FindWallNormal(), FVector::UpVector) * RunSpeed;
        GravityScale = 0;
    }
}

Источник: Unreal C++ Character Movement

Промт 12: Многопоточный парсер карт высот для ландшафта в Unity (Jobs System)

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

Промт: «Используй Unity's Job System для генерации шума Перлина и создания HeightMap. Создай структуру HeightMapJob : IJobParallelFor с входным параметром float[] noiseMap. В Execute вычисляй значение noise.snoise(x,y) и записывай в output array. После завершения Schedule и Complete примени результат к TerrainData.SetHeights. Учти, что NativeArray требует Dispose.»

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

public struct HeightMapJob : IJobParallelFor
{
    public NativeArray<float> heights;
    public int width;
    public float scale;
    public void Execute(int i)
    {
        int x = i % width;
        int y = i / width;
        heights[i] = Mathf.PerlinNoise(x * scale, y * scale);
    }
}
// Использование:
var job = new HeightMapJob { heights = new NativeArray<float>(width*height, Allocator.TempJob), width=width, scale=0.02f };
JobHandle handle = job.Schedule(width*height, 64);
handle.Complete();
// Применить к TerrainData

Источник: Unity Jobs System

Заключение

Мы рассмотрели 12 промтов, покрывающих три основных движка — Unity, Unreal Engine и Godot — от базового движения до многопоточных вычислений. Каждый промт можно скопировать, адаптировать под свой проект и использовать в работе с AI-ассистентом. Чтобы получить максимальную пользу, уточняйте контекст (версию движка, имена классов) и всегда проверяйте сгенерированный код на соответствие документации. Попробуйте эти промты в вашем следующем проекте: запустите AI, вставьте промт и получите готовый функционал за секунды. А если хотите научиться составлять такие запросы самостоятельно — изучайте документацию и практикуйтесь на реальных задачах.

← Все статьи

Комментарии

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

Автоматизируйте платежные операции: как AI-агент ASI Biont интегрируется с Qiwi API, чтобы сократить время сверки на 80%

24 июля 2026

12 промтов для генерации изображений: от стилей до референсов в Midjourney, DALL·E и Stable Diffusion

24 июля 2026

Vibe coding с OpenAI: новый голосовой режим в ChatGPT Desktop меняет правила игры

24 июля 2026

Prentis: новая AI-лаборатория Рида Хоффмана и Марка Пинкуса привлекает $100 млн

24 июля 2026

Интеграция E-Ink Waveshare с ASI Biont: автономный AI-дашборд для умного дома — схема, код и сценарии

24 июля 2026

Swift и iOS-разработка (SwiftUI): Как AI-обучение на Asibiont.com ускоряет вход в профессию в 2026 году

24 июля 2026

Industrial IoT Gateways + ASI Biont: как подключить промышленный шлюз к AI-агенту и автоматизировать мониторинг

24 июля 2026

Croc GUI: зашифрованная P2P передача файлов без терминала (кроссплатформенно)

24 июля 2026

Процессы сознания в искусственной системе: от теории к экспериментам 2026 года

24 июля 2026