Chill Naga Ответов: 1

[Решено] как изменить текст на холсте на основе состояний.


Приветствую!

Я нахожусь в конце своей короткой текстовой приключенческой игры \ практики, и он отладил ее настолько, насколько я сейчас думаю, что могу. Достаточно того, что это позволяет мне играть в тестовую игру в 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

Пожалуйста. Я опубликую это как решение.

1 Ответов

Рейтинг:
9

ZurdoDev

Из комментариев мы обнаружили, что ваш текстовый объект с именем "text" в коде не был инициализирован. Поскольку вы объявили его общедоступным, он будет отображаться как элемент в свойствах скрипта в главном окне Unity. Перетащите текстовый объект с холста в иерархии в свойство Text в скрипте.