В единстве у меня есть словарь, в котором я храню много данных. Мне нужно получить доступ к данным, прочитать их, а иногда перезаписать их . У меня есть это внутри класса, который написан более или менее как
public class myClass
{
public int myNumber;
public string myString;
}
public class MyData : MonoBehaviour
{
public Dictionary<string, myClass> someData = new Dictionary<string, myClass>();
private void Awake()
{
someData.Add("one", new myClass() { myNumber = 1, myString = "first" });
someData.Add("two", new myClass() { myNumber = 2, myString = "second" });
someData.Add("three", new myClass() { myNumber = 3, myString = "third" });
}
}
Чтобы не вызывать gameObject.GetComponent<MyData>().someData
каждый раз, когда мне нужны данные словаря (так как они нужны во многих GameObjects и скриптах), я думал о установка словаря как static
, что позволило бы ссылаться на него с MyData.someData
(и, надеюсь, с лучшей производительностью):
public static Dictionary<string, myClass> someData = new Dictionary<string, myClass>();
Однако, когда я пытаюсь получить доступ к данным словаря в методе Start
другие классы (которые должны выполняться после Awake
метода MyData
), MyData.someData
всегда null
. Я не знаю, связано ли это с порядком вызовов или есть проблема с установкой словаря как stati c. Я недостаточно опытен, чтобы понять.
Является ли static
правильным использованием здесь для словаря? Или есть лучшие решения?
Более того, если есть словарь, который я только хочу читать, но никогда не изменяю, есть ли способы определить его так, чтобы он оставался неизменным?