Запуск кода в редакторе

Что такое tool?

tool это мощная строка кода, которая будучи добавлена на верх вашего скрипта, делает его выполняемым в редакторе. Вы также можете определить какие части скрипта будут выполняться в редакторе, какие в игре, а какие и там и там.

Вы можете использовать её для достижения многих вещей, но это наиболее полезно для дизайна уровней и визуальных представлений вещей которые сложно предсказать. Здесь показаны некоторые примеры использования:

  • Если у вас есть пушка которая стреляет ядрами которые взаимодействуют с физикой (гравитацией), вы может рисовать траекторию ядер в редактор, делая дизайн уровней намного проще.
  • Если у вас есть прыжковые платформы с различными высотами прыжка, для каждой из них вы сможете нарисовать максимальную высоту на которую игрок может подпрыгнуть, что также делает дизайн уровней лёгким.
  • Если ваш игрок не использует спрайт, но рисует его из кода, вы можете сделать эту отрисовку выполняемой в редакторе так что вы увидите вашего игрока.

Как использовать это

Чтобы сделать ваш скрипт исполняемым, поместите ключевое слово tool в самый верх вашего кода.

Для проверки что вы находитесь в редакторе, используйте Engine.editor_hint.

Например, если вы хотите исполнять некоторый код только в редакторе, используйте:

if Engine.editor_hint:
    # Code to execute when in editor.

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

if not Engine.editor_hint:
    # Code to execute when in game.

Части кода которые не будут иметь ни одного из 2 условий запустятся и в редакторе и в игре.

Здесь показано как может выглядеть функция _process():

func _process(delta):
    if Engine.editor_hint:
        # Code to execute in editor.

    if not Engine.editor_hint:
        # Code to execute in game.

    # Code to execute both in editor and in game.

Примечание

Изменения в редакторе постоянны. Другими словами, когда вы удаляете скрипт, ваш нод будет сохранять направление вращения. Будьте осторожны чтобы не сделать нежелательных изменений.

Попробуйте

Добавьте нод Sprite на вашу сцену и установить текстуру на иконку Godot. Присоедините и откройте скрипт, и измените его на это:

tool
extends Sprite

func _process(delta):
    rotation_degrees += 180 * delta

Сохраните скрипт и вернитесь в редактор. Вы должны увидеть как ваш объект вращается. Если вы запустите игру, он также будет вращаться.

../../_images/rotating_in_editor.gif

Примечание

Если вы не увидели изменений, перезагрузите сцену (закройте и откройте снова).

Теперь давайте выберем когда и какой код запустится. Измените функцию _process() чтобы она выглядела вот так:

func _process(delta):
    if Engine.editor_hint:
        rotation_degrees += 180 * delta
    else:
        rotation_degrees -= 180 * delta

Сохраните скрипт. Теперь объект будет вращаться по часовой стрелке в редакторе, но если вы запустите игру он будет вращаться против часовой стрелки.

Примечание

Код из других нодов не запускается в редакторе. Ваш доступ к другим нодам ограничен. Вы можете получить доступ к древу и нодам, и их свойствам по умолчанию, но вы не можете получить доступ к переменным пользователя. Если вы хотите сделать это, другие ноды должны также запустится в редакторе. AutoLoad ноды не могут быть доступны из редактора вообще.

Предупреждение

Неправильное использование tool может привести к многим ошибкам. Рекомендуется вначале писать код так как вы хотите чтобы он работал, и лишь затем добавлять tool на верх. Также убедитесь какие части кода запускаются в редакторе, а какие в игре. Таким образом вы легче найдёте ошибки.