Прежде всего не используйте Свойства для класса Dialogues
! Свойства (без каких-либо вспомогательных полей) никогда (де) не сериализуются.
Именно поэтому вы получаете null
от GetValue
, потому что свойства никогда не устанавливаются.
Удалите все {get; set;}
и сделайте эти переменные довольно простыми полями
public string text1;
public string choices1;
....
Вы должны использовать свойства только там, где они вам действительно нужны - которые обычно имеют свойства доступа только для чтения или для проверки некоторых значений перед тем, как вы установите их из внешнего источника.
То же самое относится и ко всем этим свойствам в DialogueManager
.
Если вы действительно хотите остаться со свойствами (в DialogueManager
), вам лучше читать непосредственно и писать в ссылку dial
, которая у вас там есть, например,
public string text1
{
get { return dial.text1; }
set { dial.text1 = value; }
}
Однако, если вы просто сделаете либо
public Dialogues Dial;
или, по крайней мере, укажите свойство только для чтения
private Dialogues dial;
public Dialogues Dial
{
get { return dial; }
}
любой другой компонент может просто получить доступ к этим значениям через это поле intead:
dialogueManagerReference.Dial.text1
и вам не нужно копировать какие-либо значения.
Дополнительно при использовании
public Dialogues Dial;
или
[SerializeField] private Dialogues Dial;
вы также можете редактировать / отлаживать эти значения непосредственно в Unity Inspector.
И, наконец, эта структура данных выглядит немного странно, повторяя все эти имена и типы с числами ... У меня нет вашего JSON-файла, так что, возможно, вы его так и получаете, но уверены, что в нем нет списков / массивов? ? Я предпочел бы ожидать структуру данных здесь, например,
[Serializable]
public class Dialogues
{
public Dialogue[] DialogueList;
}
[Serializable]
public class Dialogue
{
public string Text;
public string[] Choices;
public string[] Consequences;
}
и соответствующий JSON будет выглядеть, например,
{
"DialogueList" : [
{
"Text" : "some text",
"Choices" : [
"Option A" , "Option B", "Option C"
],
"Consequences" : [
"Good Boy!", "Oh No!", "Well maybe acceptable ..."
]
},
{
"Text" : "some other text",
"Choices" : [
"Option Left" , "Option Right"
],
"Consequences" : [
"Yeay :)", "Neyy :("
]
},
... and 21 more entries
]
}