Принцип работы EditorScript

от автора

Всем привет. С вами я, stalker320, и сегодня я хотел бы рассказать про написание служебных скриптов, запускающихся в редакторе. Всем желающим прочесть — добро пожаловать под кат


EditorScript — это такой скрипт, который можно запустить по нажатию комбинации Ctrl+Shift+X прямо из движка. Он может исполнять различные служебные функции. К примеру создать необходимую структуру каталогов в проекте.

tool extends EditorScript  var folders: PoolStringArray = [# Наши папки к созданию 	"res://assets/textures/",# Их определяет разработчик 	"res://assets/fonts/",# Просто напишите сюда все конечные пути, что хотите создать 	"res://resources/", 	"res://addons/", 	"res://scenes/", 	"res://scripts/singletons/", 	"res://scripts/resources/", 	"res://scripts/editor_scripts/" ]  var placeholder: Resource = load("res://placeholder.tres") # Ресурс-пустышка для сохранения структуры файлов. По желанию  func _run() -> void: # Входная функция этого скрипта 	var dir = Directory.new() 	for folder in folders: # проход по списку папок 		if !dir.dir_exists(folder): 			var err = OK 			err = dir.make_dir_recursive(folder) 			if err != OK: 				prints("Error", err) 				return 			else: 				if !dir.file_exists(folder.plus_file("placeholder.tres")): 					# Создаём файл плейсхолдера для гита если не существует 					err = ResourceSaver.save(folder.plus_file("placeholder.tres"), placeholder) 					if err != OK: 						prints("Error", err)  						return 					else: 						# Говорим что создали (не обязательно) 						prints("Making", folder) 						prints("Making", folder.plus_file("placeholder.tres")) 	print("Successful. Structure created or already exists.") 	return 

К сожалению я освоил их не очень хорошо, поэтому создать генератор какого-нибудь API для дальнейшего моддинга игры фанатами пока не вышло. (Хотя создать необходимую структуру файлов вышло, а это значит, что кто-либо другой может расширить функционал через словарь и создавать необходимые скрипты). Кроме того, чтобы создавать нужную структуру файлов прямо в редакторе, через метод get_scene() можно взаимодействовать и с самой сценой (Достойные примеры скриптов и сцен, к сожалению, отсутствуют).

Простите, что статья вышла короткой, но я в первую очередь хотел показать скрипт как пример, а также объяснить на русском языке как это использовать.

Спасибо за внимание. Не думаю, что буду писать статьи в дальнейшем очень часто, но у меня есть идеи, о чём можно написать.

ссылка на оригинал статьи https://habr.com/ru/post/563740/