[Решено] как изменить текст на холсте на основе состояний.
Приветствую!
Я нахожусь в конце своей короткой текстовой приключенческой игры \ практики, и он отладил ее настолько, насколько я сейчас думаю, что могу. Достаточно того, что это позволяет мне играть в тестовую игру в Unity. Начальный текст, который я выставил, загружается просто отлично,но ни одна из клавиш не предназначалась для перехода к другим сценам с большим количеством текста.
Я помню, что мне нужно было что-то сделать, но не то, что именно, чтобы заставить холст читать текстовые строки из указанного кода c#.
Запрашиваю помощь со скриншотами рабочей среды Unity, чтобы следовать ниже - и первыми битами кода, которые перечисляют и определяют состояния.
Рабочая среда : [^]
Индикация ошибок консоли при попытке тестирования : [^]
Код ниже :
using UnityEngine; using UnityEngine.UI; using System.Collections; public class Game : MonoBehaviour { public Text text; private enum states {begin, light, d1, d2, applaud, deal, cave, memories, reflection, path1, egg, TH, no6, ocean, bEnd1, credits, summer, phone, memory, basement, weed, upstairs, devil, awake, bEnd2, computer, bEnd3, GOLDEN, GOLDEN2} private states myState; // Use this for initialization void Start () { myState = states.begin; } // Update is called once per frame void Update () { print (myState); if (myState == states.begin) { begin(); } else if (myState == states.light) { light(); } else if (myState == states.cave) { cave(); } else if (myState == states.path1) { path1(); } else if (myState == states.egg) { egg(); } else if (myState == states.TH) { TH(); } else if (myState == states.ocean) { ocean(); } else if (myState == states.bEnd1) { bEnd1(); } else if (myState == states.summer) { summer(); } else if (myState == states.basement) { basement(); } else if (myState == states.upstairs) { upstairs(); } else if (myState == states.awake) { awake(); } else if (myState == states.bEnd2) { bEnd2(); } else if (myState == states.computer) { computer(); } else if (myState == states.bEnd3) { bEnd3(); } else if (myState == states.GOLDEN) { GOLDEN(); } else if (myState == states.d1) { d1(); } else if (myState == states.d2) { d2(); } else if (myState == states.applaud) { applaud(); } else if (myState == states.deal) { deal(); } else if (myState == states.memories) { memories(); } else if (myState == states.reflection) { reflection(); } else if (myState == states.egg) { egg(); } else if (myState == states.no6) { no6(); } else if (myState == states.credits) { credits(); } else if (myState == states.phone) { phone(); } else if (myState == states.memory) { memory(); } else if (myState == states.GOLDEN2) { GOLDEN2(); } } void begin () { text.text = "This is like a bad dream. You don't know how you got here, where this place is, or why you got here, but you know that you feel uneasy. " + "Something is very wrong with all of this. You should try and look for a way out of...wherever this is! \n \n " + "You could go and see about that [L]ight in the distance, investigate the sound coming from a nearby [C]ave, or head down the nearby [P]ath..." ; if (Input.GetKeyDown(KeyCode.L)) {myState = states.light;} else if (Input.GetKeyDown(KeyCode.C)) {myState = states.cave;} else if (Input.GetKeyDown(KeyCode.P)) {myState = states.path1;} }
-----------------
Я очень новичок в программировании Unity и C#, поэтому, пожалуйста, держите ответы простыми.
Короче говоря: игра не реагирует на кнопки состояния. Импортированный аудиофайл выдает ошибку, сообщения об ошибках консоли озадачивают меня.
Информация: Unity версия 4.6. 9F1
Спасибо!
Что я уже пробовал:
Возня с кодом, несколько изменений взаимодействия с пользовательским интерфейсом, перетаскивание файла актива скрипта в разные места-все безрезультатно.
ZurdoDev
Ошибка говорит о том, что что-то является нулевым в строке 81.
Chill Naga
Строка 81 - это первый экземпляр "text. text", который вы можете увидеть в моем фрагменте кода выше. В левом нижнем углу собственно Unity я не вижу красного предупреждения для этого, я вижу уведомление оливкового цвета, потому что я случайно назвал одно из моих состояний "светом", и оно просто говорит мне, что есть функция с таким именем.
ZurdoDev
Вы определяете текст как текстовый объект в верхней части класса,но никогда не устанавливаете его в коде. Вы устанавливаете его в дизайнере?
Chill Naga
Извините, я не совсем понимаю, что вы имеете в виду, устанавливая его в дизайнере. Вы имеете в виду главное окно Unity? Я действительно думаю, что это то, что я забыл, как делать". Один скриншот включает в себя выделение" текстового " элемента, который показывает, что я скопировал game.cs - или скрипт с текстовыми строками в нем - в место, которое его приняло.
ZurdoDev
Да, так что во-первых, просто убедитесь, что вы понимаете ошибку. Это говорит о том, что текст не был инициализирован, поэтому вы не можете вызвать text.text.
Во-вторых, поскольку вы объявили свою переменную как общедоступную, она должна отображаться в окне свойств скрипта в главном окне Unity. Вы можете перетащить текстовый объект с холста на него или сделать то же самое в коде.
Chill Naga
О БОЖЕ, БЛАГОДАРЮ ТЕБЯ.
Я забыл перетащить верхний левый текстовый элемент в правую часть игры (сценария).
Теперь он реагирует на мои кнопки и соответственно меняет состояние, так что я могу закончить тестирование и полировку.
Спасибо!
ZurdoDev
Пожалуйста. Я опубликую это как решение.