Среда, 18 Декабря 2024, 05:07

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Выбор и последствие
dreenlineДата: Вторник, 10 Мая 2016, 15:20 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Привет! Помогите определится, как можно сделать выбор событий. Например, у меня есть 3 персонажа. После убийства одного из них игрок получает фидбек(поседствие его выбора). Разумеется, после разных выборов идут разные последствия.Эти последствия думаю делать в виде текстовых сообщений(добавить image через UI) через setactive(true). Это нормально? Ну и все же главный вопрос, как можно сделать систему выбора и последствий? Сейчас планирую делать через PlaerPrefs, но понимаю, что это сума сойти можно будет. Может есть какие-то более нормальные аналоги? Подскажите где копать

Сообщение отредактировал dreenline - Вторник, 10 Мая 2016, 16:10
LertmindДата: Вторник, 10 Мая 2016, 20:32 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Тут надо разграничить, что тебе надо сделать.

Про систему:
Если говорить про текстовые квесты, то вся игра по сути граф с переменными. От переменных зависит переход по графу: какой выбор можно сделать из возможных (есть бластер? в выборе - выстрелить из бластера) или повлиять на сюжет неявно (при одном и том же выборе, но учитывая предыдущие). Обычно проблем нет и переменных не много, так проще проработать каждую ветку и так проще запомнить игроку.

Про реализацию:
Для работы с графом решений лучше иметь редактор, представляющий граф как блок схемы с переходами, чем указывать всё в коде. Конечно если у тебя не текстовый квест и всего несколько переменных влияющих на мир, то почему бы просто не обращаться к ним напрямую в коде.

1. Про нормально ли выводить текст через Image, не знаю, зависит от ситуации.
2. Для простых переменных PlayerPrefs сойдёт и не понимаю почему тебе это не подходит, возможно ты собираешься добавлять очень много влияющих переменных, что само по себе странно. Здесь вообще вопрос про хранение данных в постоянной памяти, я не эксперт, но свой ответ про сериализацию данных делал http://gcup.ru/forum/59-69742-1. PlayerPrefs это по сути хранилище ключ-значение, которое также реализуемо через сериализацию и которое удобнее, чем создание класса со всеми переменными, хранящими каждый выбор. Кроме этого есть дополнения для хранения переменных в постоянной памяти, иногда даже без написания кода https://www.assetstore.unity3d.com/en....ory:113.
dreenlineДата: Вторник, 10 Мая 2016, 20:52 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
Lertmind, Я приведу пример, что я хочу получить)
Игрок находится в доме, в этом доме он может подойти к столу, на котором маленький мир, что-то типо 3д карты, как в скайриме(между мирами можно перемещаться, я хочу сделать это через setActive. То есть, если игрок выбирает 1 мир, он становится true, если после этого он выбирает другой мир, данный мир становится false, а новый мир - true). В этом мире ходят люди. Некоторые люди просят игрока о помощи. Например: крестьянин говорит, что на его дом нападают волки. Даны 3 варианта ответа(расставить капканы, спрятаться в доме или уехать в другое место. Или игрок может найти в доме книгу и почитать, что лучше сделать в такой стиуации. В зависимости от выбора игрока, ему через некоторое время приходит фидбек, что произошло с крестьянином. Если игрок все сделал правильно, у него повышается мораль, если же из-за него крестьянин погиб, то мораль уменьшается.
Кажется понял, что пока надо курить диалоговую и event систему


Сообщение отредактировал dreenline - Вторник, 10 Мая 2016, 21:01
LertmindДата: Вторник, 10 Мая 2016, 21:17 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Цитата dreenline ()
Кажется понял, что пока надо курить диалоговую и event систему

Да. Примерно это и хотел сказать. Глобально у тебя влияет только мораль (я бы это назвал репутацией в данном примере), которая является результатом квеста от NPC. Сам квест - это система диалогов, которую я называл выше графом выбора.
dreenlineДата: Вторник, 10 Мая 2016, 21:30 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
Lertmind, Я кажется понял, как я смогу сделать. Я добавлю скрипт, что бы при нажатии на персонажа высвечивался текст(через ui-> image и setActive). Соответственно в этом image создам кнопки с выбором, при нажатии на которые будет высвечиваться еще один image с фидбеком, и за нажатие на кнопку получу соответственную репутацию. Просто придется создать много image`в со всеми последствиями, и включать их попеременно. Вроде звучит не сложно smile
Потом погуглю еще диалоговую систему и event систему, хотя мне кажется так как написал я будет по проще. Хотя, как всегда и бывает, как только начну делать, так сразу всплывет куча проблем. Как думаешь, это нормальный способ?
LertmindДата: Вторник, 10 Мая 2016, 22:12 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
Если выбора будет не много, то возможно и подойдёт, попробуй. Систем диалогов достаточно найдётся. Вообще, я немного смутно представил твоё описание и не понял что ты имеешь в виду под "event система".
dreenlineДата: Пятница, 13 Мая 2016, 22:00 | Сообщение # 7
постоянный участник
Сейчас нет на сайте
Lertmind, Под event системой я имел ввиду, что после выбора одного из вариантов что-то происходит smile

Добавлено (12 мая 2016, 19:29)
---------------------------------------------
Сразу же столкнулся с проблемой :(
Сделал 2 скрипта
1) проверяет через RayCast, смотрит ли игрок на книгу, и выводит надпись (нажмите Е для взаимодействия)


2й Если игрок нажимает на Е и смотрит на объект, то открывается картинка с текстом


В результате этого появляется ошибка "Object reference not set to an instance of an object". Но я не понимаю, почему. Все тексты и картинки(gameObject`ы) прикреплены к объектам.

Добавлено (13 мая 2016, 18:56)
---------------------------------------------
Ап! Помогите, пожалуйста! Никак не могу разобраться в чем ошибка(

Добавлено (13 мая 2016, 22:00)
---------------------------------------------
Ура! Я наконец-то решил проблему! Если кому-то понадобится, проблема заключалась в том, что скрипт не мог найти объект с камерой. Пришлось воспользоваться FindObjectWithTag("MainCamera") и после этого все заработало)
Вот скрипт который у меня получился в итоге

  • Страница 1 из 1
  • 1
Поиск:

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