Оказывается, 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
). директивы) Исключить такие сценарии - это совсем другое дело, и нет простого способа сделать такую вещь, о которой я знаю.