Что это: пошаговые сценарии настройки квестов в инспекторе: QuestManager, QuestNoCodeAction, NeoCondition. Какие объекты создавать, куда вешать компоненты, что подключать в UnityEvent.
Как использовать: убедиться, что в сцене есть QuestManager и Known Quests; при Start Conditions назначить Condition Context. Выбрать сценарий ниже и выполнить шаги; проверять кнопками в инспекторе или в игре.
--- Какие объекты создавать, куда вешать компоненты, что подключать в UnityEvent.
Как с этим работать:
- Убедиться, что в сцене есть QuestManager, в Known Quests добавлены нужные QuestConfig, в Condition Context назначен объект (если в квесте есть Start Conditions).
- Выбрать сценарий ниже и выполнить шаги по порядку.
- Проверять через кнопки в инспекторе (
QuestNoCodeAction.Execute, кнопки в блоке Editor у QuestManager) или в игре.
Цель: по нажатию UI-кнопки принять выбранный квест.
- Выбрать объект с компонентом Button (или панель, на которой висит кнопка).
- Add Component → Neoxider → Quest → Quest NoCode Action.
- В поле Action Type выбрать
Accept, в поле Quest перетащить QuestConfig. - У Button в On Click () добавить вызов: Object = этот же объект, Function = QuestNoCodeAction → Execute().
Проверка: нажать [Execute Action] в инспекторе у QuestNoCodeAction или нажать кнопку в игре. Если квест не принимается: конфиг в Known Quests, Id не пустой, квест не принят ранее, все Start Conditions при Evaluate(Condition Context) дают true.
Цель: когда условие (здоровье, счётчик, флаг) становится true — засчитать одну цель квеста.
- Выбрать или создать GameObject.
- Add Component → Neoxider → Condition → NeoCondition. Настроить Conditions (объект, компонент, свойство, оператор, порог) по NeoCondition.
- На тот же объект Add Component → Neoxider → Quest → Quest NoCode Action.
- В компоненте: Action Type =
CompleteObjective, Quest = ваш QuestConfig, Objective Index = индекс цели (0, 1, 2, …). - В NeoCondition в Events → On True добавить вызов: Object = этот объект, Function = QuestNoCodeAction → Execute().
При первом срабатывании NeoCondition.On True менеджер засчитает указанную цель. Проверка: кнопка [Execute Action] у QuestNoCodeAction.
Цель: при завершении любого квеста (все цели выполнены) показать панель или воспроизвести анимацию.
- Выбрать QuestManager в сцене.
- В инспекторе найти On Any Quest Completed (UnityEvent без аргументов).
- Добавить вызов: перетащить UI-объект (панель, попап), выбрать функцию показа/анимации. Параметры не передаются.
Если нужна разная реакция по questId: использовать On Quest Completed (UnityEvent<string>) и подключить метод своего скрипта с одним параметром string (questId).
- У QuestManager найти On Any Quest Accepted (без аргументов).
- Добавить вызов: звук, анимация, показ подсказки. Срабатывает при любом принятии квеста.
Цель: когда выполнена одна цель (например «собрать ключ») — сразу поставить галочку в списке целей.
- У QuestManager найти On Objective Completed (UnityEvent<string, int>: questId, objectiveIndex).
- Подключить метод своего скрипта с двумя параметрами (string, int). В методе по questId и objectiveIndex обновить нужный элемент UI.
- У QuestManager найти On Quest Failed (UnityEvent<string>).
- Подключить вызов: сообщение «Квест провален», скрытие квеста в журнале, звук и т.д. Событие вызывается только при явном вызове FailQuest (из кода или другого компонента).
- В UI добавить кнопку "Restart".
- В обработчик кнопки вызвать
QuestManager.RestartQuest(quest)илиRestartQuest(questId). - Менеджер сбросит старое состояние квеста и снова попробует принять квест с проверкой Start Conditions.
- В меню/настройках добавить кнопку "Reset All Quests".
- В обработчик кнопки вызвать
QuestManager.ResetAllQuests(). - После этого UI перечитывает список состояний через
GetState/AllQuestsи показывает квесты какNotStarted.
- Создать
QuestFlowConfigи добавить квесты вChains(для линейных) иStandalone Quests(для независимых). - Для линейной цепочки включить
Strict Order. - Перед
AcceptQuestв UI проверять доступность черезQuestFlowConfig.CanAcceptQuest(...). - В журнале помечать заблокированные квесты как
Locked(пока не завершён предыдущий).
- На UI-кнопку добавить компонент
QuestNoCodeAction. - Выбрать
Action Type:Accept— принять квест,CompleteObjective— зачесть цель,Fail— провалить,Restart— перезапустить,Reset— сбросить один,ResetAll— сбросить всё.
- Назначить
Quest(иObjective Index, если нужно). - Опционально назначить
Flow Configдля проверки последовательности приAccept. - В
Button.OnClickвызватьQuestNoCodeAction.Execute(). - Подключить
On Success / On Failed / On Result Messageк UI (лог, попапы, индикаторы).
- QuestManager, блок Editor: Editor Quest Id, Editor Objective Index, кнопки Accept Quest (Editor Id) и Complete Objective (Editor) — тест приёма и зачёта цели без игровых действий.
- QuestNoCodeAction: [Execute Action] для выбранного Action Type.
- Разная реакция на завершение разных квестов (по questId) — нужен метод в своём скрипте с параметром string, подключённый к On Quest Completed.
- Проверка «доступен ли квест» для отображения в UI — в модуле нет метода «проверить без принятия»; реализовывать в коде (оценка условий или свои флаги).
- Сложная выдача наград или ветвление по диалогу — удобнее в коде по событиям QuestCompleted / ObjectiveProgress.