[code] using System.Collections; using System.Collections.Generic; using UnityEngine;
public class letter1 : MonoBehaviour {
public GameObject letter1wait; public GameObject letter1done; public GameObject letter2sleep; public GameObject letter2wait; public GameObject letter2done; float x,x1; public float y; bool K = false;
// Use this for initialization
// Update is called once per frame void Start() { }
// Update is called once per frame void Update() {
if (Input.GetKey(KeyCode.B)) { if (K == true) { Destroy(letter2wait.gameObject); letter2done.gameObject.transform.position = new Vector3(x1, y, 0); } }
if (Input.GetKey(KeyCode.R)) { Destroy(letter1wait.gameObject); x = -2; letter1done.gameObject.transform.position = new Vector3(x, y, 0); Destroy(letter2sleep); x1 = 0; letter2wait.gameObject.transform.position = new Vector3(x1, y, 0); K = true; }
} }
Вот такой скрипт, по задумке после нажатия R должен первый объект поменять цвет (вставиться другой объект), после чего переменная К станет правдивой и переведет действие на следующий этап, нажатие B, но по факту после нажатия R выполняется вся часть апдейта, то есть меняетс не только первый объект, но и второй, вне зависимости от нажатия B/ Помогите(
Сообщение отредактировал Seleborn - Воскресенье, 21 Апреля 2019, 08:09
1. Когда на форум код выкидываешь, тег [cоde] юзать должен ты. 2. Конструкция if (K == true) {...} избыточна, пиши проще: if (K) {...}. 3. Создавать и дестроить 5 игровых объектов, чтобы поменять цвет? Мсье знает толк в извращениях... 4. Метод GetKey() по идее срабатывает каждый тик таймера (Update()), возможно лучше будет GetKeyUp()? Хотя вообще нужно мутить с GetButton(), но, как я понимаю, ты пока какие-то тесты проводишь... 5. Сделай вставки вида Debug.Log("текст") в разных местах, чтобы понять, какая часть кода действительно выполняется и в каком порядке она это делает. Иначе может оказаться, что не код виноват, а ты неправильно интерпретируешь результат его выполнения, т.к. захода в if (K) {...} могло вообще ни разу не быть. Типа такого:
Код
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class letter1 : MonoBehaviour {
public GameObject letter1wait; public GameObject letter1done; public GameObject letter2sleep; public GameObject letter2wait; public GameObject letter2done; float x,x1; public float y; bool K = false;
// исполняем каждый кадр void Update() { // Debug.Log("апдейт"); // можно попробовать, но лучше не стоит
if (Input.GetKeyUp(KeyCode.B)) { Debug.Log("была отжата клавиша B"); if (K) { Debug.Log("сработало условие флага K"); Destroy(letter2wait.gameObject); letter2done.gameObject.transform.position = new Vector3(x1, y, 0); } }
if (Input.GetKeyUp(KeyCode.R)) { Debug.Log("была отжата клавиша R"); Destroy(letter1wait.gameObject); x = -2; letter1done.gameObject.transform.position = new Vector3(x, y, 0); Destroy(letter2sleep); x1 = 0; letter2wait.gameObject.transform.position = new Vector3(x1, y, 0); Debug.Log("поднимаем флаг K"); K = true; } } }
P.S. У меня нет Unity, чтобы проверить код, да и без файлов сцены запустить этот скрипт не получится. Совет на будущее: давай читаемые названия переменным (например, что такое K?) и пиши комментарии (что это за нажатия R, B и т.д.?). Иначе потом свой собственный код понять не сможешь...
Сообщение отредактировал TimKruz - Воскресенье, 21 Апреля 2019, 01:06
да собственно основная задача здесь такая, есть на экране 3 картинки, общее слово КИТ, вот при нажатии R(К) происходит замена цвета, то есть буква к становится как бы нажатой, и переходит по условию к выполнению нажатия кнопки B(И). так что в принципе по описанию все понятно) а вот почему не выходит к условию, это не понятно, хотя код с нажатием В прописывается в if, собственно он и не должен выполняться, пока кнопка не будет нажата
http://prntscr.com/nese8q это не то условие?? http://prntscr.com/nesf1h, так выглядит с дебагами. ТО есть после нажатия кнопки К нажатие В уже не проверяется( но все что под этим иф выполняется
Сообщение отредактировал Seleborn - Воскресенье, 21 Апреля 2019, 09:16
есть на экране 3 картинки, общее слово КИТ, вот при нажатии R(К) происходит замена цвета, то есть буква к становится как бы нажатой, и переходит по условию к выполнению нажатия кнопки B(И).
ЦитатаSeleborn ()
Точно... запарился... я этот объект уничтожил, повесил на другой, скрипт срабатывает как положено.. Всю головушку сломал))
Дай угадаю, какая-то игра на угадывание слов? И, разумеется, китом дело не закончится, будут ещё уровни?
Тогда тебе нужно сразу придумывать универсальное решение. Пишешь скрипт, вешаешь его на невидимый объект ("менеджер сцены"), вводишь в него параметры уровня (какие буквы ожидать?) и ссылки на связанные объекты (картинки-буквы или что там у тебя). Это нужно, чтобы использовать один скрипт для любого уровня игры, настраивая его через внешние параметры (кастомные поля в окошке редактора сцены, забыл как это называется). А иначе задолбаешься для каждого нового слова/уровня писать свой скрипт.
Да, универсальное сложнее, но зато добавлять новые уровни будет проще, а допустить ошибку будет труднее)
угадал почти. игра на обучение печати. вводятся буквы по порядку на экране, есть картинка и буквы, которые надо ввести.. я вот тоже хочу сначала одну сцену написать, а потом уже думать буду, как унифицировать, чтобы выводить все в внешних условиях.
Сообщение отредактировал Seleborn - Четверг, 25 Апреля 2019, 20:09