Среда, 27 Ноября 2024, 06:15

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
в процессе работы скрипта игнорируется условие
SelebornДата: Воскресенье, 21 Апреля 2019, 00:03 | Сообщение # 1
был не раз
Сейчас нет на сайте
[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
TimKruzДата: Воскресенье, 21 Апреля 2019, 01:02 | Сообщение # 2
старожил
Сейчас нет на сайте
1. Когда на форум код выкидываешь, тег [cоde] юзать должен ты.
2. Конструкция if (K == true) {...} избыточна, пиши проще: if (K) {...}.
3. Создавать и дестроить 5 игровых объектов, чтобы поменять цвет? Мсье знает толк в извращениях...
4. Метод GetKey() по идее срабатывает каждый тик таймера (Update()), возможно лучше будет GetKeyUp()? Хотя вообще нужно мутить с GetButton(), но, как я понимаю, ты пока какие-то тесты проводишь...
5. Сделай вставки вида Debug.Log("текст") в разных местах, чтобы понять, какая часть кода действительно выполняется и в каком порядке она это делает. Иначе может оказаться, что не код виноват, а ты неправильно интерпретируешь результат его выполнения, т.к. захода в if (K) {...} могло вообще ни разу не быть. Типа такого:

P.S. У меня нет Unity, чтобы проверить код, да и без файлов сцены запустить этот скрипт не получится. Совет на будущее: давай читаемые названия переменным (например, что такое K?) и пиши комментарии (что это за нажатия R, B и т.д.?). Иначе потом свой собственный код понять не сможешь...




Сообщение отредактировал TimKruz - Воскресенье, 21 Апреля 2019, 01:06
SelebornДата: Воскресенье, 21 Апреля 2019, 08:05 | Сообщение # 3
был не раз
Сейчас нет на сайте
да собственно основная задача здесь такая, есть на экране 3 картинки, общее слово КИТ, вот при нажатии R(К) происходит замена цвета, то есть буква к становится как бы нажатой, и переходит по условию к выполнению нажатия кнопки B(И). так что в принципе по описанию все понятно) а вот почему не выходит к условию, это не понятно, хотя код с нажатием В прописывается в if, собственно он и не должен выполняться, пока кнопка не будет нажата
drcrackДата: Воскресенье, 21 Апреля 2019, 08:22 | Сообщение # 4
старожил
Сейчас нет на сайте
у тебя в проверке нажатия R не хватает условия if(!K) { } чтобы оно не повторялось после первого нажатия

SelebornДата: Воскресенье, 21 Апреля 2019, 09:11 | Сообщение # 5
был не раз
Сейчас нет на сайте
http://prntscr.com/nese8q
это не то условие??
http://prntscr.com/nesf1h, так выглядит с дебагами. ТО есть после нажатия кнопки К нажатие В уже не проверяется( но все что под этим иф выполняется


Сообщение отредактировал Seleborn - Воскресенье, 21 Апреля 2019, 09:16
drcrackДата: Воскресенье, 21 Апреля 2019, 09:22 | Сообщение # 6
старожил
Сейчас нет на сайте
ну возможно ты просто уничтожаешь обьект на котором висит этот скрипт
SelebornДата: Воскресенье, 21 Апреля 2019, 09:26 | Сообщение # 7
был не раз
Сейчас нет на сайте
Точно... запарился... я этот объект уничтожил, повесил на другой, скрипт срабатывает как положено.. Всю головушку сломал)) спасибо

Сообщение отредактировал Seleborn - Воскресенье, 21 Апреля 2019, 09:44
drcrackДата: Воскресенье, 21 Апреля 2019, 10:24 | Сообщение # 8
старожил
Сейчас нет на сайте
Цитата
это не то условие??

нет, это проверка B
TimKruzДата: Воскресенье, 21 Апреля 2019, 21:17 | Сообщение # 9
старожил
Сейчас нет на сайте
Цитата Seleborn ()
есть на экране 3 картинки, общее слово КИТ, вот при нажатии R(К) происходит замена цвета, то есть буква к становится как бы нажатой, и переходит по условию к выполнению нажатия кнопки B(И).
Цитата Seleborn ()
Точно... запарился... я этот объект уничтожил, повесил на другой, скрипт срабатывает как положено.. Всю головушку сломал))

Дай угадаю, какая-то игра на угадывание слов? И, разумеется, китом дело не закончится, будут ещё уровни?

Тогда тебе нужно сразу придумывать универсальное решение. Пишешь скрипт, вешаешь его на невидимый объект ("менеджер сцены"), вводишь в него параметры уровня (какие буквы ожидать?) и ссылки на связанные объекты (картинки-буквы или что там у тебя). Это нужно, чтобы использовать один скрипт для любого уровня игры, настраивая его через внешние параметры (кастомные поля в окошке редактора сцены, забыл как это называется). А иначе задолбаешься для каждого нового слова/уровня писать свой скрипт.

Да, универсальное сложнее, но зато добавлять новые уровни будет проще, а допустить ошибку будет труднее)


SelebornДата: Понедельник, 22 Апреля 2019, 20:33 | Сообщение # 10
был не раз
Сейчас нет на сайте
угадал почти. игра на обучение печати. вводятся буквы по порядку на экране, есть картинка и буквы, которые надо ввести.. я вот тоже хочу сначала одну сцену написать, а потом уже думать буду, как унифицировать, чтобы выводить все в внешних условиях.

Сообщение отредактировал Seleborn - Четверг, 25 Апреля 2019, 20:09
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг