Добавлен Devion,
опубликован
Практическая применимость
Сегодня я оказался с новым проектом на руках, ну и естественно нужно было вникать в код, который написан был до меня.
В таких случаях могут и возникают ситуации, при которых не понятно, где используется скрипт, который ты сейчас читаешь. Примерно в такой же ситуации оказался сегодня я, когда обнаружил скрипт, абсолютно не связанный с остальным кодом. Вопрос был таков - а в каких сценах он вообще используется?
Юнити в стандарте может сказать вам, где в открытой сцене используется объект. Но когда сцен переваливает за 100 становится проблематично ориентироваться - логично, что открывать каждую сцену и проверять - не вариант.
В таких случаях могут и возникают ситуации, при которых не понятно, где используется скрипт, который ты сейчас читаешь. Примерно в такой же ситуации оказался сегодня я, когда обнаружил скрипт, абсолютно не связанный с остальным кодом. Вопрос был таков - а в каких сценах он вообще используется?
Юнити в стандарте может сказать вам, где в открытой сцене используется объект. Но когда сцен переваливает за 100 становится проблематично ориентироваться - логично, что открывать каждую сцену и проверять - не вариант.
Этот небольшой скриптик поможет вам в таких ситуациях.
Для того, чтобы сцены находились исправно в Edit/Project Settings/Editor параметр Asset Serialization Mode должен быть выставлен как Force Text. После этого все сцены должны быть пересохранены в этом формате вручную. В принципе, если вы используете контроль версий, то вам так или иначе придется использовать этот режим.
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
/// <summary>
/// Проверяет, использовался ли выбранный файл в какой-либо сцене и если да, то в какой
/// Добавляется в контекстное меню файлов в папке проекта
/// </summary>
public static class SystemObjectFindUsables
{
[MenuItem("Assets/Где используется?")]
public static void CheckUsables()
{
var path = AssetDatabase.GetAssetPath(Selection.activeObject);
if (string.IsNullOrEmpty(path))
{
Debug.LogWarning("Выберите файл из проекта для проверки на использование");
return;
}
var guid = AssetDatabase.AssetPathToGUID(path);
var references = GetReferencesScenes(guid);
Debug.Log("[" + Path.GetFileName(path) + "] Связанные сцены: " + references.Count + "\n" + string.Join("\n", references.ToArray()));
}
private static List<string> GetReferencesScenes(string guid)
{
var paths = AssetDatabase.GetAllAssetPaths();
var result = new List<string>();
foreach (var path in paths)
{
if (!path.EndsWith(".unity"))
continue;
var sceneAsText = File.ReadAllText(path);
if (sceneAsText.Contains(guid))
result.Add(path);
}
return result;
}
}
`
ОЖИДАНИЕ РЕКЛАМЫ...
Комментарии пока отсутcтвуют.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.