Спеціальні монітори продуктивності
Вступ
Як пояснюється в документації Панель налагоджувача, Godot має нижню панель Debugger > Monitors, яка дозволяє відстежувати різні значення за допомогою графіків, що показують їх зміну з часом. Дані для цих графіків отримано з синглтона Performance двигуна.
Починаючи з Godot 4.0, ви можете оголошувати власні значення для відображення на вкладці «Монітори». Приклади використання спеціальних моніторів продуктивності включають:
Відображення показників ефективності, які стосуються вашого проекту. Наприклад, у воксельній грі ви можете створити монітор продуктивності для відстеження кількості фрагментів, які завантажуються щосекунди.
Відображення внутрішньоігрових показників, які не пов’язані виключно з продуктивністю, але все ж корисні для побудови графіків для налагодження. Наприклад, ви можете відстежувати кількість ворогів, присутніх у грі, щоб переконатися, що ваша механіка нересту працює належним чином.
Створення спеціального монітора продуктивності
У цьому прикладі ми створимо спеціальний монітор продуктивності, щоб відстежувати кількість ворогів у поточному проекті.
Головна сцена містить вузол Timer з таким прикріпленим сценарієм:
extends Timer
func _ready():
# The slash delimiter is used to determine the category of the monitor.
# If there is no slash in the monitor name, a generic "Custom" category
# will be used instead.
Performance.add_custom_monitor("game/enemies", get_enemy_count)
timeout.connect(_on_timeout)
# Spawn 20 enemies per second.
wait_time = 0.05
start()
func _on_timeout():
var enemy = preload("res://enemy.tscn").instantiate()
get_parent().add_child(enemy)
# This function is called every time the performance monitor is queried
# (this occurs once per second in the editor, more if called manually).
# The function must return a number greater than or equal to 0 (int or float).
func get_enemy_count():
return get_tree().get_nodes_in_group("enemies").size()
Другим параметром Performance.add_custom_monitor є Callable.
enemy.tscn — це сцена з кореневим вузлом Node2D і дочірнім вузлом Timer. До Node2D додається такий скрипт:
extends Node2D
func _ready():
add_to_group("enemies")
$Timer.timeout.connect(_on_timer_timeout)
# Despawn enemies 2.5 seconds after they spawn.
$Timer.wait_time = 2.5
$Timer.start()
func _on_timer_timeout():
queue_free()
У цьому прикладі, оскільки ми створюємо 20 ворогів на секунду, і кожен ворог зникає через 2,5 секунди після появи, ми очікуємо, що кількість ворогів, присутніх у сцені, стабілізується до 50. Ми можемо переконатися в цьому, подивившись на графік.
Щоб візуалізувати графік, створений за допомогою цього спеціального монітора продуктивності, запустіть проект, перейдіть до редактора під час виконання проекту та відкрийте Налагоджувач > Монітори внизу вікна редактора. Прокрутіть униз до нещодавно доступного розділу Гра та позначте Вороги. Ви повинні побачити наступний графік:
Приклад графіка редактора з настроюваного монітора продуктивності
Примітка
Код обробки монітора продуктивності не обов’язково повинен міститись у тому ж сценарії, що й самі вузли. Натомість ви можете перемістити реєстрацію монітора продуктивності та функцію отримання до autoload.
Запит до монітора продуктивності в проекті
Якщо ви хочете відобразити значення монітора продуктивності у вікні запущеного проекту (а не в редакторі), використовуйте Performance.get_custom_monitor("category/name"), щоб отримати значення користувацького монітора. Ви можете відобразити значення за допомогою Label, RichTextLabel, Власне малювання в 2D, 3D текст тощо.
Цей метод також можна використовувати в експортованих проектах (режим налагодження та випуску), що дозволяє створювати візуалізації поза редактором.