Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
@GDScript
Вбудовані константи, функції та анотації GDScript.
Опис
Список службових функцій і анотацій, доступних з будь-якого сценарію, написаного на GDScript.
Список глобальних функцій і констант, до яких можна отримати доступ будь-якою мовою сценаріїв, див. @GlobalScope.
Посібники
Методи
void |
|
String |
|
Variant |
convert(what: Variant, type: Variant.Type) |
Object |
dict_to_inst(dictionary: Dictionary) |
inst_to_dict(instance: Object) |
|
is_instance_of(value: Variant, type: Variant) |
|
len(var: Variant) |
|
Resource |
load(path: String) |
ord(char: String) |
|
Resource |
preload(path: String) |
void |
print_debug(...) vararg |
void |
|
range(...) vararg |
|
type_exists(type: StringName) |
Константи
PI = 3.14159265358979 🔗
Константа, яка показує, скільки разів діаметр кола поміщається в його периметрі. Це еквівалентно TAU / 2, або 180 градусів в обертах.
TAU = 6.28318530717959 🔗
Константа кола, окружність одного кола в радіанах. Це еквівалентно PI * 2, або 360 градусів в обертах.
INF = inf 🔗
Позитивна нескінченність з рухомою комою. Це результат ділення з рухомою комою, коли дільник має вигляд 0.0. Для від'ємної нескінченності використовуйте -INF. Ділення на -0.0 призведе до від'ємної нескінченності, якщо чисельник додатний, тому ділення на 0.0 - це не те саме, що ділення на -0.0 (незважаючи на те, що 0.0 == -0.0 повертає true).
Попередження: Числова нескінченність це концепція лише для чисел з рухомою комою і не має еквівалента для цілих чисел. Ділення цілого числа на 0 не дасть INF, а призведе до помилки під час виконання.
NAN = nan 🔗
«Не число», недійсне значення з плаваючою комою. Його повертають деякі недійсні операції, такі як ділення числа з плаваючою комою 0.0 на 0.0.
NAN має спеціальні властивості, зокрема те, що != завжди повертає true, тоді як інші оператори порівняння завжди повертають false. Це вірно навіть під час порівняння з самим собою (NAN == NAN повертає false та NAN != NAN повертає true). Через це необхідно використовувати @GlobalScope.is_nan(), щоб перевірити, чи число дорівнює NAN.
Попередження: «Не число» – це поняття лише для чисел з плаваючою комою та не має еквівалента для цілих чисел. Ділення цілого числа 0 на 0 не призведе до NAN, а натомість призведе до помилки під час виконання.
Анотації
@abstract() 🔗
Позначає клас або метод як абстрактний.
Абстрактний клас – це клас, екземпляр якого не можна створити безпосередньо. Натомість він призначений для успадкування іншими класами. Спроба створити екземпляр абстрактного класу призведе до помилки.
Абстрактний метод – це метод, який не має реалізації. Тому після заголовка функції очікується новий рядок або крапка з комою. Це визначає контракт, якому повинні відповідати класи, що успадковуються, оскільки сигнатура методу має бути сумісною під час перевизначення.
Класи, що успадковуються, повинні або забезпечувати реалізації для всіх абстрактних методів, або клас, що успадковується, має бути позначений як абстрактний. Якщо клас має принаймні один абстрактний метод (або власний, або нереалізований успадкований), то він також має бути позначений як абстрактний. Однак зворотне не вірно: абстрактному класу дозволено не мати абстрактних методів.
@abstract class Shape:
@abstract func draw()
class Circle extends Shape:
func draw():
print("Drawing a circle.")
class Square extends Shape:
func draw():
print("Drawing a square.")
@export() 🔗
Позначте наступну властивість як експортовану (можна редагувати в панелі інспектора та зберегти на диску). Щоб керувати типом експортованої властивості, використовуйте нотацію підказки типу.
extends Node
enum Direction {LEFT, RIGHT, UP, DOWN}
# Вбудовані типи.
@export var strint = ""
@export var int_number = 5
@export var float_number: float = 5
# Enums.
@export variable type: Variant.Type
@export variable format: Image.Format
@export var direction: Direction
# Ресурси.
@export var image: Image
@export var custom_resource: CustomResource
# Вузли.
@export var node: node
@export var custom_node: CustomNode
# Введені масиви.
@export var int_array: Array[int]
@export var direction_array: Array[Direction]
@export var image_array: Array[Image]
@export var node_array: Array[node]
Примітка: Спеціальні ресурси та вузли слід реєструвати як глобальні класи за допомогою class_name, оскільки Inspector наразі підтримує лише глобальні класи. Інакше буде експортовано менш специфічний тип.
Примітка: Експорт Node підтримується лише в класах, похідних від Node, і має ряд інших обмежень.
@export_category(name: String) 🔗
Визначає нову категорію для наступних експортованих властивостей. Допоможе впорядкувати властивості на панелі інспектора.
Дивіться також @GlobalScope.PROPERTY_USAGE_CATEGORY.
@export_category("Statistics")
@export var hp = 30
@export var speed = 1.25
Примітка: Категорії у списку панелі Інспектора зазвичай розділяють властивості, що належать до різних класів (Node, Node2D, Sprite і т. д.). Для більшої наочності рекомендується використовувати @export_group та @export_subgroup.
@export_color_no_alpha() 🔗
Експорт властивісті Color, Array[Color] або PackedColorArray без можливості редагувати прозорість (Color.a).
Дивіться також @GlobalScope.PROPERTY_HINT_COLOR_NO_ALPHA.
@export_color_no_alpha var dye_color: Color
@export_color_no_alpha var dye_colors: array[color]
@export_custom(hint: PropertyHint, hint_string: String, usage: BitField[PropertyUsageFlags] = 6) 🔗
Дозволяє встановити спеціальну підказку, рядок підказки та позначки використання для експортованої властивості. Зауважте, що GDScript не виконує перевірку, він просто передає параметри до редактора.
@export_custom(PROPERTY_HINT_NONE, "suffix:m") suffix var: Vector3
Примітка: Незалежно від значення usage прапор @GlobalScope.PROPERTY_USAGE_SCRIPT_VARIABLE додається завжди, як і будь-яка явно оголошена змінна сценарію.
@export_dir() 🔗
Експортуйте властивість String, Array[String] або PackedStringArray як шлях до каталогу. Шлях буде обмежено папкою проекту та її вкладеними папками. Перегляньте @export_global_dir, щоб дозволити вибір із усієї файлової системи.
Дивіться також @GlobalScope.PROPERTY_HINT_DIR.
@export_dir var sprite_folder_path: String
@export_dir var sprite_folder_paths: Array[String]
@export_enum(names: String, ...) vararg 🔗
Експортуйте int, String, Array[int], Array[String], PackedByteArray, PackedInt32Array, PackedInt64Array або PackedStringArray як пронумерований список параметрів (або масив параметрів). Якщо властивість є int, тоді зберігається індекс значення, у тому ж порядку, що надаються значення. Ви можете додавати явні значення за допомогою двокрапки. Якщо властивість є String, тоді значення зберігається.
Дивіться також @GlobalScope.PROPERTY_HINT_ENUM.
@export_enum("Warrior", "Wizard", "Thief") var character_class: int
@export_enum("Slow:30", "Medium:60", "Very fast:200") var character_speed: int
@export_enum("Rebecca", "Mary", "Leah") var character_name: string
@export_enum("Sword", "Spear", "Mace"") var character_items: Array[int]
@export_enum("double_jump", "climb", "dash") var character_skills: Array[String]
Якщо ви хочете встановити початкове значення, ви повинні вказати його явно:
@export_enum("Rebecca", "Mary", "Leah") var character_name: String = "Rebecca"
Якщо ви хочете використовувати іменовані переліки GDScript, замість цього використовуйте :ref:`@export<class_@GDScript_annotation_@export>`:
enum CharacterName {REBECCA, MARY, LEAH}
@export var character_name: Symbol name
enum CharacterItem {SWORD, SCRIPT, MACE}
@export var character_items: Array[CharacterItem]
@export_exp_easing(hints: String = "", ...) vararg 🔗
Експортуйте властивість з плаваючою комою за допомогою віджета редактора easing. Можна надати додаткові підказки для налаштування поведінки віджета. "attenuation" перевертає криву, що робить її більш інтуїтивно зрозумілою для редагування властивостей затухання. "positive_only" обмежує значення лише як більше або дорівнює нулю.
Дивіться також @GlobalScope.PROPERTY_HINT_EXP_EASING.
@export_exp_easing var transition_speed
@export_exp_easing("attenuation") var fading_attenuation
@export_exp_easing("positive_only") var effect_power
@export_exp_easing var speeds: Array [float]
@export_file(filter: String = "", ...) vararg 🔗
Експортувати властивість String, Array[String] або PackedStringArray як шлях до файлу. Шлях буде обмежено папкою проєкту та її підпапками. Див. @export_global_file, щоб дозволити вибір з усієї файлової системи.
Якщо вказано filter, для вибору будуть доступні лише відповідні файли.
Див. також @GlobalScope.PROPERTY_HINT_FILE.
@export_file var sound_effect_path: String
@export_file("*.txt") var notes_path: String
@export_file var level_paths: Array[String]
Примітка: Файл буде збережено та посилатиметься на нього як на UID, якщо він доступний. Це гарантує, що посилання буде дійсним навіть після переміщення файлу. Ви можете використовувати методи ResourceUID для перетворення його на шлях.
@export_file_path(filter: String = "", ...) vararg 🔗
Те саме, що й @export_file, але файл буде збережено як необроблений шлях. Це означає, що він може стати недійсним під час переміщення файлу. Якщо ви експортуєте шлях Resource, спробуйте використовувати @export_file.
@export_flags(names: String, ...) vararg 🔗
Експортувати властивість цілого числа як поле бітового прапора. Це дозволяє зберігати кілька «перевірених» чи true значень з однією властивістю та зручно вибирати їх із док-станції Inspector.
Дивіться також @GlobalScope.PROPERTY_HINT_FLAGS.
@export_flags("Fire", "Water", "Earth", "Wind") var spell_elements = 0
Ви можете додати явні значення за допомогою двокрапки:
@export_flags("Self:4", "Allies:8", "Self and Allies:12", "Foes:16")
Ви також можете комбінувати кілька прапорів:
@export_flags("A:4", "Allies:8", "Me and Allies:12", "Enemies:16")
var spell_targets = 0
Примітка. Значення прапора має бути не менше 1 і не більше 2 ** 32 - 1.
Примітка: На відміну від @export_enum, попереднє явне значення не враховується. У наступному прикладі A дорівнює 16, B дорівнює 2, C дорівнює 4.
@export_flags("A:16", "B", "C") змінна x
Ви також можете використовувати анотацію для :ref:`Array<class_Array>`\ \[:ref:`int<class_int>`\ \], :ref:`PackedByteArray<class_PackedByteArray>`, :ref:`PackedInt32Array<class_PackedInt32Array>` і :ref:`PackedInt64Array<class_PackedInt64Array>`\
@export_flags("Fire", "Water", "Earth", "Wind") var phase_elements: Array[int]
Експортуйте цілочисельну властивість як поле бітового прапора для двовимірних шарів навігації. Віджет у доці Inspector використовуватиме назви шарів, визначені в ProjectSettings.layer_names/2d_navigation/layer_1.
Дивіться також @GlobalScope.PROPERTY_HINT_LAYERS_2D_NAVIGATION.
@export_flags_2d_navigation var navigation_layers: int
@export_flags_2d_navigation var navigation_layers_array: Array[int]
@export_flags_2d_physics() 🔗
Експортуйте властивість цілого числа як поле бітового прапора для шарів 2D фізики. Віджет у доці Inspector використовуватиме назви шарів, визначені в ProjectSettings.layer_names/2d_physics/layer_1.
Дивіться також @GlobalScope.PROPERTY_HINT_LAYERS_2D_PHYSICS.
@export_flags_2d_physics змінна physics_layers: int
@export_flags_2d_physics вар. physics_layers_array: Array[int]
@export_flags_2d_render() 🔗
Експортуйте властивість цілого числа як поле бітового прапорця для шарів 2D візуалізації. Віджет у доці Inspector використовуватиме назви шарів, визначені в ProjectSettings.layer_names/2d_render/layer_1.
Дивіться також @GlobalScope.PROPERTY_HINT_LAYERS_2D_RENDER.
@export_flags_2d_render var render_layers: int
@export_flags_2d_render var render_layers_array: Array[int]
Експортуйте властивість цілого числа як поле бітового прапора для шарів 3D-навігації. Віджет у доці Inspector використовуватиме назви шарів, визначені в ProjectSettings.layer_names/3d_navigation/layer_1.
Дивіться також @GlobalScope.PROPERTY_HINT_LAYERS_3D_NAVIGATION.
@export_flags_3d_navigation var navigation_layers: int
@export_flags_3d_navigation var navigation_layers_array: Array[int]
@export_flags_3d_physics() 🔗
Експортуйте властивість цілого числа як поле бітового прапорця для шарів 3D-фізики. Віджет у доці Inspector використовуватиме назви шарів, визначені в ProjectSettings.layer_names/3d_physics/layer_1.
Дивіться також @GlobalScope.PROPERTY_HINT_LAYERS_3D_PHYSICS.
@export_flags_3d_physics var physics_layers: int
@export_flags_3d_physics var physics_layers_array: Array[int]
@export_flags_3d_render() 🔗
Експортуйте цілочисельну властивість як поле бітового прапора для шарів 3D візуалізації. Віджет у доці Inspector використовуватиме назви шарів, визначені в ProjectSettings.layer_names/3d_render/layer_1.
Дивіться також @GlobalScope.PROPERTY_HINT_LAYERS_3D_RENDER.
@export_flags_3d_render var render_layers: int
@export_flags_3d_render var render_layers_array: Array[int]
@export_flags_avoidance() 🔗
Експортуйте властивість цілого числа як поле бітового прапора для шарів уникнення навігації. Віджет у доці Inspector використовуватиме назви шарів, визначені в ProjectSettings.layer_names/avoidance/layer_1.
Дивіться також @GlobalScope.PROPERTY_HINT_LAYERS_AVOIDANCE.
@export_flags_avoidance вар. Avoidance_layers: int
@export_flags_avoidance вар. Avoidance_layers_array: Array[int]
@export_global_dir() 🔗
Експортуйте властивість String, Array[String] або PackedStringArray як абсолютний шлях до каталогу. Шлях можна вибрати з усієї файлової системи. Перегляньте @export_dir, щоб обмежити його папкою проекту та її вкладеними папками.
Дивіться також @GlobalScope.PROPERTY_HINT_GLOBAL_DIR.
@export_global_dir var sprite_folder_path: String
@export_global_dir var sprite_folder_paths: Array[String]
@export_global_file(filter: String = "", ...) vararg 🔗
Експортуйте властивість String, Array[String] або PackedStringArray як абсолютний шлях до файлу. Шлях можна вибрати з усієї файлової системи. Перегляньте @export_file, щоб обмежити його папкою проекту та її вкладеними папками.
Якщо надано
filter, лише відповідні файли будуть доступні для вибору.Дивіться також @GlobalScope.PROPERTY_HINT_GLOBAL_FILE.
@export_global_file var sound_effect_path: String
@export_global_file("*.txt") var notes_path: String
@export_global_file var multiple_paths: Array[String]
@export_group(name: String, prefix: String = "") 🔗
Визначте нову групу для таких експортованих властивостей. Це допомагає впорядкувати властивості в доці Inspector. Групи можна додавати за допомогою необов’язкового prefix, що змусить групу розглядати лише властивості, які мають цей префікс. Групування буде розірвано для першої властивості, яка не має префікса. Префікс також видаляється з назви властивості в панелі Inspector.
Якщо
prefixне вказано, кожна наступна властивість буде додано до групи. Група закінчується, коли визначається наступна група або категорія. Ви також можете примусово завершити групу, використовуючи цю анотацію з порожніми рядками для параметрів,@export_group("", "").Групи не можуть бути вкладеними, використовуйте @export_subgroup, щоб додати підгрупи всередині груп.
Дивіться також @GlobalScope.PROPERTY_USAGE_GROUP.
@export_group("Racer Properties")
@export var nickname = "Nick"
@export var age = 26
@export_group("Car Properties", "car_7")
@export var car_label = "Speedy"
@export var car_number = 3
@export_group("", "")
@export var ungrouped_number = 3
@export_multiline(hint: String = "", ...) vararg 🔗
Експортуйте властивість String, Array[String], PackedStringArray, Dictionary або Array[Dictionary] з великим віджетом TextEdit замість LineEdit. Це додає підтримку багаторядкового вмісту та спрощує редагування великої кількості тексту, що зберігається у властивості.
Див. також @GlobalScope.PROPERTY_HINT_MULTILINE_TEXT.
codblock
@export_multiline var character_biography
@export_multiline var npc_dialogs: ArrayString
@export_multiline("monospace", "no_wrap") var favorite_ascii_art: String
[/codblock]
@export_node_path(type: String = "", ...) vararg 🔗
Експортуйте властивість NodePath або Array[NodePath] із фільтром для дозволених типів вузлів.
Дивіться також @GlobalScope.PROPERTY_HINT_NODE_PATH_VALID_TYPES.
@export_node_path("Bottom", "Bottom TouchScreenButton") var some_button
@export_node_path("Button", "TouchScreenButton") var many_buttons: Array[NodePath]
Примітка. Тип має бути власним класом або глобально зареєстрованим сценарієм (з використанням ключового слова class_name), який успадковує Node.
@export_placeholder(placeholder: String) 🔗
Експортуйте властивість String, Array[String] або PackedStringArray із текстом-заповнювачем, який відображається у віджеті редактора, якщо немає значення.
Дивіться також @GlobalScope.PROPERTY_HINT_PLACEHOLDER_TEXT.
@export_placeholder("Name in lowercase") var character_id: String
@export_placeholder("Name in lowercase") var friend_ids: Array[String]
@export_range(min: float, max: float, step: float = 1.0, extra_hints: String = "", ...) vararg 🔗
Експортуйте властивість int, float, Array[int], Array[float], PackedByteArray, PackedInt32Array, PackedInt64Array, PackedFloat32Array або PackedFloat64Array як значення діапазону. Діапазон має бути визначений параметрами min та max, а також необов'язковим параметром step та різноманітними додатковими підказками. Для цілочисельних властивостей step за замовчуванням має значення 1. Для чисел з плаваючою комою це значення залежить від налаштування EditorSettings.interface/inspector/default_float_step.
Якщо надано підказки "or_greater" та "or_less", віджет редактора не обмежуватиме значення межами діапазону. Підказка "exp" призведе до експоненціальної зміни відредагованих значень у діапазоні. Підказка "prefer_slider" призведе до використання повзунка замість стрілок для редагування цілочисельних значень, тоді як "hide_control" приховає елемент, що керує значенням віджета редактора.
Підказки також дозволяють вказувати одиниці вимірювання для відредагованого значення. Використовуючи "radians_as_degrees", ви можете вказати, що фактичне значення має бути в радіанах, але має відображатися в градусах на панелі Інспектора (значення діапазону також у градусах). "degrees" дозволяє додати знак градуса як суфікс одиниці (значення залишається незмінним). Нарешті, можна надати власний суфікс за допомогою "suffix:unit", де "unit" може бути будь-яким рядком.
Див. також @GlobalScope.PROPERTY_HINT_RANGE.
@export_range(0, 20) var number
@export_range(-10, 20) var number
@export_range(-10, 20, 0.2) var number: float
@export_range(0, 20) var numbers: Array[float]
@export_range(0, 100, 1, "or_greater") var power_percent
@export_range(0, 100, 1, "or_greater", "or_less") var health_delta
@export_range(-180, 180, 0.001, "radians_as_degrees") var angle_radians
@export_range(0, 360, 1, "degrees") var angle_degrees
@export_range(-8, 8, 2, "suffix:px") var target_offset
@export_storage() 🔗
Експортуйте властивість із @GlobalScope.PROPERTY_USAGE_STORAGE прапорцем. Властивість не відображається в редакторі, але вона серіалізується та зберігається у файлі сцени або ресурсу. Це може бути корисним для сценаріїв @tool. Також значення властивості копіюється під час виклику Resource.duplicate() або Node.duplicate(), на відміну від неекспортованих змінних.
var a # Не зберігається у файлі, не відображається в редакторі.
@export_storage var b # Зберігається у файлі, не відображається в редакторі.
@export var c: int # Зберігається у файлі, відображається в редакторі.
@export_subgroup(name: String, prefix: String = "") 🔗
Визначте нову підгрупу для таких експортованих властивостей. Це допомагає впорядкувати властивості в доці Inspector. Підгрупи працюють так само, як групи, за винятком того, що для існування їм потрібна батьківська група. Перегляньте @export_group.
Дивіться також @GlobalScope.PROPERTY_USAGE_SUBGROUP.
@export_group("Racer Properties")
@export var nickname = "Nick"
@export var age = 26
@export_subgroup(", "Car Properties")
@export var car_label = "Speedy"
@export var car_number = 3
Примітка: Підгрупи не можуть бути вкладеними, але ви можете використовувати роздільник похилої риски (/), щоб досягти бажаного ефекту:
@export_group("Car Properties")
@export_subgroup("Wheels", "wheel_")
@export_subgroup("Wheels/front", "front_wheel_")
@export var front_wheel_strength = 10
@export var front_wheel_mobility = 5
@export_subgroup("Wheels/rear", "rear_wheel_")
@export var rear_wheel_strength = 8
@export var rear_wheel_mobility = 3
@export_subgroup("Wheels", "wheel_")
@export var wheel_material: PhysicsMaterial
@export_tool_button(text: String, icon: String = "") 🔗
Експортуйте властивість Callable як кнопку, яку можна натиснути, з міткою text. При натисканні кнопки викликається абонент.
Якщо вказано icon, він використовується для отримання піктограми для кнопки через Control.get_theme_icon() із типу теми "EditorIcons". Якщо icon опущено, замість нього використовується типовий значок "Callable".
Розгляньте можливість використання EditorUndoRedoManager, щоб дозволити безпечне скасування дії.
Дивіться також @GlobalScope.PROPERTY_HINT_TOOL_BUTTON.
@tool
extends Sprite2D
@export_tool_button("Hello") var hello_action = hello
@export_tool_button("Randomize the color!", "ColorRect")
var randomize_color_action = randomize_color
func hello():
print("Привіт, світе!")
func randomize_color():
var undo_redo = EditorInterface.get_editor_undo_redo()
undo_redo.create_action("Random color Sprite2D")
undo_redo.add_do_property(self, &"self_modulate", Color(randf(), randf(), randf()))
undo_redo.add_undo_property(self, &"self_modulate", self_modulate)
undo_redo.commit_action()
Примітка: Властивість експортується без прапора @GlobalScope.PROPERTY_USAGE_STORAGE, оскільки Callable неможливо належним чином серіалізувати та зберегти у файлі.
Примітка: В експортованому проєкті не існує ані EditorInterface, ані EditorUndoRedoManager, що може призвести до несправності деяких сценаріїв. Щоб запобігти цьому, ви можете використовувати Engine.get_singleton() і опустити статичний тип в декларації змінної:
var undo_redo = Engine.get_singleton(&"EditorInterface").get_editor_undo_redo()
Примітка: Уникайте зберігання лямбда-викликів у змінних-членах класів на основі RefCounted (наприклад, ресурсів), оскільки це може призвести до витоку пам’яті. Використовуйте лише викликані методи та додатково Callable.bind() або Callable.unbind().
@icon(icon_path: String) 🔗
Додайте спеціальний значок до поточного сценарію. Піктограма, указана в icon_path, відображається в панелі Scene для кожного вузла цього класу, а також у різних діалогових вікнах редактора.
@icon("res://path/to/class/icon.svg")
Примітка: Лише скрипти може мати спеціальний значок. Внутрішні класи не підтримуються.
Примітка: Оскільки анотації описують предмет, анотація @icon має бути розміщена перед визначенням класу та успадкуванням.
Примітка: На відміну від більшості інших анотацій, аргумент анотації @icon має бути рядковим літералом (постійні вирази не підтримуються).
@onready() 🔗
Позначте наступну властивість як призначену, коли Node буде готовий. Значення для цих властивостей не призначаються відразу після ініціалізації вузла (Object._init()), а натомість обчислюються та зберігаються безпосередньо перед Node._ready().
@onready var character_name = $Label
@rpc(mode: String = "authority", sync: String = "call_remote", transfer_mode: String = "reliable", transfer_channel: int = 0) 🔗
Позначте наступний метод для віддалених викликів процедури. Дивіться Високий рівень багатокористувацької гри.
Якщо mode встановлено як "any_peer", це дозволяє будь-якому аналогу викликати цю функцію RPC. В іншому випадку лише колега з владою має право викликати його, а mode слід зберігати як "авторитет". Під час налаштування функцій як RPC за допомогою Node.rpc_config() кожен із цих режимів відповідно відповідає MultiplayerAPI.RPC_MODE_AUTHORITY і Multiplayer API.RPS_MODe_ANY_PEER режимам RPC. Див. RPCMode. Якщо колега, який не є авторитетом, спробує викликати функцію, яка дозволена лише для авторитету, функція не буде виконана. Якщо помилку можна виявити локально (коли конфігурація RPC узгоджується між локальним і віддаленим аналогом), повідомлення про помилку буде відображено на аналізі відправника. В іншому випадку віддалений аналог виявить помилку та надрукує там помилку.
Якщо sync встановлено як "call_remote", функція буде виконуватися лише на віддаленому рівні, але не локально. Щоб запустити цю функцію локально, встановіть sync на "call_local". Під час налаштування функцій як RPC за допомогою Node.rpc_config() це еквівалентно встановленню call_localна true
Прийняті значення transfer_mode: "ненадійний", "unreliable_ordered" або "надійні". Він встановлює режим передачі базового MultiplayerPeer. Дивіться MultiplayerPeer.transfer_mode.
transfer_channel визначає канал базового MultiplayerPeer. Дивіться MultiplayerPeer.transfer_channel.
Порядок mode, sync та transfer_mode не має значення, але значення, пов"язані з одним і тим же аргументом, не повинні використовуватися більше одного разу. transfer_channel завжди має бути четвертим аргументом (ви повинні вказати 3 попередні аргументи).
func fn(): pass
@rpc("any_peer", "unreliable_ordered")
func fn_update_pos(): pass
@rpc("authority", "call_remote", "reliable", 0) # Equivalent to @rpc
func fn_default(): pass
Примітка: Методи, анотовані за допомогою @rpc, не можуть отримувати об"єкти, які визначають необхідні параметри в Object._init(). Див. Object._init() для отримання додаткової інформації.
@static_unload() 🔗
Створіть скрипт зі статичними змінними, щоб не зберігатися після втрати всіх посилань. Якщо скрипт буде завантажено знову, статичні змінні повернуться до своїх значень за замовчуванням.
Примітка: Оскільки анотації описують свою тему, анотація @static_unload має бути розміщена перед визначенням класу та успадкуванням.
Попередження: Наразі через помилку сценарії ніколи не звільняються, навіть якщо використовується анотація @static_unload.
@tool() 🔗
Позначте поточний скрипт як інструментальний, щоб редактор міг його завантажити і виконати. Дивіться Запуск коду у редакторі.
@tool
extends Node
Примітка: Оскільки анотації описують свій предмет, анотацію @tool слід розміщувати перед визначенням та успадкуванням класу.
@warning_ignore(warning: String, ...) vararg 🔗
Позначте наступний оператор, щоб ігнорувати вказане warning. Перегляньте систему попереджень GDScript.
func test():
print("привіт")
return
@warning_ignore("unavailable_code")
print("недосяжний")
Дивіться також @warning_ignore_start і @warning_ignore_restore.
@warning_ignore_restore(warning: String, ...) vararg 🔗
Перестає ігнорувати перелічені типи попереджень після @warning_ignore_start. Ігнорування зазначених типів попереджень буде скинуто до параметрів проекту. Цю анотацію можна опустити, щоб ігнорувати типи попереджень до кінця файлу.
Примітка: На відміну від більшості інших анотацій, аргументи анотації @warning_ignore_restore мають бути рядковими літералами (постійні вирази не підтримуються).
@warning_ignore_start(warning: String, ...) vararg 🔗
Починає ігнорувати перелічені типи попереджень до кінця файлу або анотації @warning_ignore_restore із заданим типом попередження.
func test():
var a = 1 # Попередження (якщо ввімкнено в налаштуваннях проекту).
@warning_ignore_start("невикористана_змінна")
var b = 2 # Немає попередження.
var c = 3 # Немає попередження.
@warning_ignore_restore("невикористана_змінна")
var d = 4 # Попередження (якщо ввімкнено в налаштуваннях проекту).
Примітка: Щоб приховати одне попередження, замість нього використовуйте @warning_ignore.
Примітка: На відміну від більшості інших анотацій, аргументи анотації @warning_ignore_start мають бути рядковими літералами (постійні вирази не підтримуються).
Описи методів
Color Color8(r8: int, g8: int, b8: int, a8: int = 255) 🔗
Застаріло: Use Color.from_rgba8() instead.
Повертає Color сформований з червоного (r8), зеленого (g8), синього (b8), і, за бажання, альфа (a8) цілочисельних каналів, кожен з яких поділений на 255.0 для кінцевого значення.
var red = Color8(255, 0, 0) # Same as Color(1, 0, 0).
var dark_blue = Color8(0, 0, 51) # Same as Color(0, 0, 0.2).
var my_color = Color8(306, 255, 0, 102) # Same as Color(1.2, 1, 0, 0.4).
Примітка: Через нижчу точність Color8() порівняно зі стандартним конструктором Color, колір, створений за допомогою Color8(), зазвичай не дорівнюватиме тому самому кольору, створеному за допомогою стандартного конструктора Color. Використовуйте Color.is_equal_approx() для порівнянь, щоб уникнути проблем з похибкою точності обчислень з плаваючою комою.
void assert(condition: bool, message: String = "") 🔗
Asserts that the condition is true. If the condition is false, an error is generated and the current method returns a default value. When running from the editor, failed asserts also cause a debugger break. This can be used as a stronger form of @GlobalScope.push_error() for reporting errors to project developers or add-on users.
An optional message can be shown in addition to the generic "Assertion failed" message. You can use this to provide additional details about why the assertion failed.
Warning: For performance reasons, the code inside assert() is only executed in debug builds or when running the project from the editor. Don't include code that has side effects in an assert() call. Otherwise, the project will behave differently when exported in release mode.
# Imagine we always want speed to be between 0 and 20.
var speed = -10
assert(speed < 20) # True, the program will continue.
assert(speed >= 0) # False, the program will stop.
assert(speed >= 0 and speed < 20) # You can also combine the two conditional statements in one check.
assert(speed < 20, "the speed limit is 20") # Show a message.
Note: assert() is a keyword, not a function. So you cannot access it as a Callable or use it inside expressions.
Повертає один символ (як String довжиною 1) заданої кодової точки Unicode code.
print(char(65)) # Виводить "A"
print(char(129302)) # Виводить "🤖" (емодзі обличчя робота)
Це інверсія методу ord(). Див. також String.chr() та String.unicode_at().
Variant convert(what: Variant, type: Variant.Type) 🔗
Застаріло: Use @GlobalScope.type_convert() instead.
Перетворює what на type найкращим чином. Параметр type використовує значення Variant.Type.
var a = [4, 2,5, 1,2]
print(a is Array) # Друкує true
var b = convert(a, TYPE_PACKED_BYTE_ARRAY)
print(b) # Виводить [4, 2, 1]
print(b is Array) # Виводить false
Object dict_to_inst(dictionary: Dictionary) 🔗
Застаріло: Consider using JSON.to_native() or Object.get_property_list() instead.
Конвертує dictionary (створений з inst_to_dict()) назад в екземпляр Object. Може бути корисний для десеріалізації.
Повертає масив словників, що представляють поточний стек викликів.
func _ready():
foo()
func foo():
bar()
func bar():
print(get_stack())
Починаючи з _ready(), bar() виведе:
[{function:bar, line:12, source:res://script.gd}, {function:foo, line:9, source:res://script.gd}, {function:_ready, line:6, source:res://script.gd}]
Див. також print_debug(), print_stack() та Engine.capture_script_backtraces().
Примітка: За замовчуванням зворотні трасування доступні лише в збірках редактора та налагоджувальних збірках. Щоб увімкнути їх також і для релізних збірок, потрібно ввімкнути ProjectSettings.debug/settings/gdscript/always_track_call_stacks.
Dictionary inst_to_dict(instance: Object) 🔗
Застаріло: Consider using JSON.from_native() or Object.get_property_list() instead.
Повертає переданий instance, перетворений на словник. Може бути корисним для серіалізації.
var foo = "bar"
func _ready():
var d = inst_to_dict(self)
print(d.keys())
print(d.values())
Роздруковує:
[@subpath, @path, foo]
[, res://test.gd, bar]
Примітка: Цю функцію можна використовувати лише для серіалізації об’єктів із прикріпленим GDScript, що зберігається в окремому файлі. Об’єкти без прикріпленого сценарію, зі сценарієм, написаним іншою мовою, або з вбудованим сценарієм не підтримуються.
Примітка: Ця функція не є рекурсивною, що означає, що вкладені об’єкти не будуть представлені як словники. Крім того, властивості, передані за посиланням (Object, Dictionary, Array і упаковані масиви), копіюються за посиланням, а не дублюються.
bool is_instance_of(value: Variant, type: Variant) 🔗
Returns true if value is an instance of type. The type value must be one of the following:
A constant from the Variant.Type enumeration, for example @GlobalScope.TYPE_INT.
An Object-derived class which exists in ClassDB, for example Node.
A Script (you can use any class, including inner one).
Unlike the right operand of the is operator, type can be a non-constant value. The is operator supports more features (such as typed arrays and dictionaries). Use the operator instead of this method if you do not need to check the type dynamically.
Examples:
print(is_instance_of(a, TYPE_INT))
print(is_instance_of(a, Node))
print(is_instance_of(a, MyClass))
print(is_instance_of(a, MyClass.InnerClass))
Note: If value and/or type are freed objects (see @GlobalScope.is_instance_valid()), or type is not one of the above options, this method will raise a runtime error.
See also @GlobalScope.typeof(), Object.is_class(), Object.get_script(), Array.is_same_typed() (and other Array methods), Dictionary.is_same_typed() (and other Dictionary methods).
Повертає довжину заданого варіанту var. Довжиною може бути кількість символів String або StringName, кількість елементів будь-якого типу масиву або розмір Dictionary. Для кожного іншого типу Variant генерується помилка під час виконання, і виконання припиняється.
var a = [1, 2, 3, 4]
len(a) # Повертає 4
var b = "Привіт!"
len(b) # Повертає 6
Resource load(path: String) 🔗
Повертає Resource із файлової системи, розташованої за абсолютним path. Якщо на нього ще нема посилань в іншому місці (наприклад, в іншому сценарії або в сцені), ресурс завантажується з диска під час виклику функції, що може спричинити невелику затримку, особливо під час завантаження великих сцен. Щоб уникнути непотрібних затримок під час багаторазового завантаження чогось, або збережіть ресурс у змінній, або використовуйте preload(). Цей метод еквівалентний використанню ResourceLoader.load() із ResourceLoader.CACHE_MODE_REUSE.
Примітка. Шляхи до ресурсів можна отримати, клацнувши правою кнопкою миші на ресурсі в док-станції FileSystem і вибравши «Копіювати шлях», або перетягнувши файл із док-станції FileSystem у поточний скрипт.
# Завантажимо сцену під назвою "main", розташовану в кореневому каталозі проєкту, і закешуємо її в змінній.
var main = load("res://main.tscn") # main міститиме ресурс PackedScene.
Важливо: відносні шляхи не є відносними до сценарію, який викликає цей метод, натомість він має префікс "res://". Завантаження з відносних шляхів може не працювати належним чином.
Ця функція є спрощеною версією ResourceLoader.load(), який можна використовувати для складніших сценаріїв.
**Примітка: ** Щоб завантажити файли за допомогою цієї функції, спочатку їх потрібно імпортувати в механізм. Якщо ви хочете завантажити Image під час виконання, ви можете використовувати Image.load(). Якщо ви хочете імпортувати аудіофайли, ви можете використати фрагмент, описаний у AudioStreamMP3.data.
Примітка: Якщо ProjectSettings.editor/export/convert_text_resources_to_binary має значення true, load() не зможе прочитати конвертовані файли в експортованому проєкті. Якщо ви покладаєтеся на завантаження файлів у PCK під час виконання, установіть ProjectSettings.editor/export/convert_text_resources_to_binary на false.
Повертає ціле число, що представляє кодову точку Unicode заданого символу char, який має бути рядком довжини 1.
print(ord("A")) # Виводить 65
print(ord("🤖")) # Виводить 129302
Це інверсія до char(). Див. також String.chr() та String.unicode_at().
Resource preload(path: String) 🔗
Повертає Resource із файлової системи, розташованої за path. Під час виконання ресурс завантажується під час аналізу скрипту. Ця функція діє як посилання на цей ресурс. Зауважте, що ця функція вимагає, щоб path був константою String. Якщо ви хочете завантажити ресурс із динамічного/змінного шляху, використовуйте load().
Примітка. Шляхи до ресурсів можна отримати, клацнувши правою кнопкою миші на ресурсі на панелі ресурсів і вибравши «Копіювати шлях» або перетягнувши файл із док-станції FileSystem у поточний скрипт.
# Створення екземпляра сцени.
var diamond = preload("res://diamond.tscn").instantiate()
Примітка: попереднє завантаження методу є ключовим словом, а не функцією. Тому ви не можете отримати до нього доступ як Callable.
void print_debug(...) vararg 🔗
Подібно до @GlobalScope.print(), але включає поточний стековий кадр під час роботи з увімкненим налагоджувачем.
Вивід у консолі може виглядати так:
Тестовий друк
За адресою: res://test.gd:15:_process()
Див. також print_stack(), get_stack() та Engine.capture_script_backtraces().
Примітка: За замовчуванням зворотні трасування доступні лише в редакторських та налагоджувальних збірках. Щоб увімкнути їх також для релізних збірок, потрібно ввімкнути ProjectSettings.debug/settings/gdscript/always_track_call_stacks.
void print_stack() 🔗
Друкує трасування стека в поточному місці коду.
Вивід у консолі може виглядати так:
Кадр 0 - res://test.gd:16 у функції '_process'
Див. також print_debug(), get_stack() та Engine.capture_script_backtraces().
Примітка: За замовчуванням зворотні трасування доступні лише в редакторських та налагоджувальних збірках. Щоб увімкнути їх також для релізних збірок, потрібно ввімкнути ProjectSettings.debug/settings/gdscript/always_track_call_stacks.
Повертає масив із заданим діапазоном. range() можна викликати трьома способами:
range(n: int): починається з 0, збільшується з кроком 1 і зупиняється перед n. Аргумент n є виключним.
range(b: int, n: int): починається з b, збільшується на крок 1 і зупиняється перед n. Аргументи b і n є включними та виключними відповідно.
range(b: int, n: int, s: int): починається з b, збільшує/зменшується кроками s та зупиняється перед n. Аргументи b і n є включними та виключними відповідно. Аргумент s може бути негативним, але не 0. Якщо s дорівнює 0, друкується повідомлення про помилку.
range() перетворює всі аргументи на int перед обробкою.
Примітка: Повертає порожній масив, якщо жодне значення не відповідає обмеженню значення (наприклад, range(2, 5, -1) або range(5, 5, 1)).
Приклади:
print(range(4)) # Виводить [0, 1, 2, 3]
print(range(2, 5)) # Виводить [2, 3, 4]
print(range(0, 6, 2)) # Виводить [0, 2, 4]
print(range(4, 1, -1)) # Виводить [4, 3, 2]
Щоб виконати ітерацію Array у зворотному напрямку, використовуйте:
var array = [3, 6, 9]
from i in range(array.size() - 1, -1, -1):
print(array[i])
Вихід:
9
6
3
Щоб виконати ітерацію float, перетворіть їх у циклі.
from i in range (3, 0, -1):
print(i / 10.0)
Вихід:
0.3
0.2
0.1
bool type_exists(type: StringName) 🔗
Застаріло: Use ClassDB.class_exists() instead.
Повертає true якщо заданий Object-похідний клас існує в ClassDB. Зауважте, що типи даних Variant не зареєстровані в ClassDB.
type_exists("Sprite2D") # Повертає true
type_exists("NonExistentClass") # Повертає false