Получить пути к исходным файлам Unity - PullRequest
0 голосов
/ 31 марта 2020

Мне нужно посмотреть исходные файлы в проекте Unity, и мне интересно, можно ли получить пути ко всем сценариям в папке Assets, которые будут включены в встроенный проигрыватель. Я знаю, что могу получить все сценарии C# в папке Assets следующим образом:

var scripts = AssetDatabase.FindAssets(string.Empty, new[] { "Assets" })
    .Select(guid => AssetDatabase.GUIDToAssetPath(guid))
    .Where(path => path.EndsWith(".cs"));

Но возможно ли получить коллекцию, содержащую все сценарии в папке Assets, которые в конечном итоге будут скомпилированы в плеер, т.е. нередактируемые скрипты?

1 Ответ

0 голосов
/ 31 марта 2020

Оказывается, Unity предоставляет легкодоступную информацию об исходных файлах, которые будут скомпилированы во встроенный проигрыватель через их собственную систему сборки. Вы можете получить пути к этим файлам следующим образом:

var assemblies = CompilationPipeline.GetAssemblies(AssembliesType.Player);
var sourcefiles = assemblies
    .SelectMany(assembly => assembly.sourceFiles)
    .Where(file => !string.IsNullOrEmpty(file) && file.StartsWith("Assets"));

CompilationPipeline.GetAssemblies(AssembliesType.Player) будет извлекать коллекцию объектов Unity Assembly для каждой из сборок, которые будут встроены в проигрыватель. Каждый из них содержит массив путей к файлам исходных файлов, которые составляют его через свойство Assembly.sourceFiles. Это позволит найти все сценарии проекта и сценарии в любых установленных пакетах, а также сценарии в любых созданных пользовательских определениях сборки, поэтому при фильтрации по file.StartsWith("Assets") будут извлечены только сценарии в папке Assets.

Это отключит все скрипты внутри любых папок Editor, а также любые скрипты внутри определений сборок, которые предназначены только для редактора, и это именно то, что мне было нужно. Тем не менее, он будет все еще извлекать сценарии, которые могут присутствовать в сборках среды выполнения, но фактически не используются в проекте (т. Е. Монобиеведение, которое не используется ни в каких сценах, или сценарий, ограниченный #if UNITY_EDITOR). директивы) Исключить такие сценарии - это совсем другое дело, и нет простого способа сделать такую ​​вещь, о которой я знаю.

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