Всем привет! В общем, ситуация следующая: есть методы у компонентов, доступные через ContexMenu. Работают как надо. Но решил немного автоматизировать и написать скрипт, где эти методы вызываются автоматически. И вот тут-то и проблема. Значения компонентов, которые устанавливаются в ходе выполнения этих методов сбрасываются при запуске PlayMode. Как, собственно, это пофиксить?
Методы компонентов:
Первый:
[ContextMenu("Fill spaces")]
public void FillSpaces()
{
connections = new List<Transform>();
LineController[] lines = GameObject.FindObjectsOfType<LineController>();
foreach (var line in lines)
{
string[] knotNames = line.gameObject.name.Split('-');
if (knotNames.Length != 2)
{
LoggerManager.Instance.Error(this, "Incorrect line name. Example: {KnotName1}-{KnotName2}");
}
if (knotNames[0] == gameObject.name)
{
connections.Add(GameObject.Find(knotNames[1]).transform);
}
else if (knotNames[1] == gameObject.name)
{
connections.Add(GameObject.Find(knotNames[0]).transform);
}
}
}
Второй:
[ContextMenu("Fill spaces")]
public void FillSpaces()
{
List<string> knotNames = new List<string>(gameObject.name.Split('-'));
top = GameObject.Find(knotNames[0]).GetComponent<Knot>();
bottom = GameObject.Find(knotNames[1]).GetComponent<Knot>();
}
Метод который вызывает эти методы:
[MenuItem("Config/AutoConfigLevel")]
public static void AutoConfigLevel()
{
Knot[] knots = GameObject.FindObjectsOfType<Knot>();
foreach (var knot in knots)
{
knot.FillSpaces();
}
LineController[] lines = GameObject.FindObjectsOfType<LineController>();
foreach (var line in lines)
{
line.FillSpaces();
}
}
Визуальные различие после использования через ContexMenu и MenuItem:
ContexMenu:
MenuItem:
Подозреваю, что нужно использовать PrefabUtility, но не могу там найти что-то подходящее.