Как сделать квест типа «Принеси» в Unity 5

квест Принеси Уроки Unity 5

Давайте рассмотрим ситуацию, когда вам необходимо реализовать в своей игре простую миссию, в которой нужно принести какой-то предмет.

Допустим, на вашей сцене есть главный персонаж (FPSController ), персонаж с которым необходимо поговорить (Сube) и объект (Sphere), который необходимо принести этому персонажу.

Сцена в Unity 5

Создадим три C# скрипта и назовем их missionplayer , missionbot  и missionobject. В первом скрипте мы будем реализовывать вывод наименования квеста на экран, определение тэга объекта из другого скрипта и определять взят квест или нет. Во втором, взаимодействие персонажа с другим персонажем, вывод  диалогового окна на экран, добавление денег за выполнение квеста. В третьем, взаимодействие персонажа с объектом и подбор предмета.

Скрипт missionplayer

using UnityEngine;
using System.Collections;
public class MissionPlayer : MonoBehaviour {
public bool quest; //  отображает название квеста на экране;
public string MissionText; // название квеста;
public string ObjectTag; // тэг объекта;
public bool MissionObjects; //отображает собран предмет или нет;
public int Money; // количество денег;

 void OnGUI () {

   if(quest) {
      GUI.Label(new Rect(20, 80, 300, 30), " " + MissionText); // значение названия квеста будет браться из скрипта Misson Bot;
   if(MissionObjects) { // если предмет собран;
      GUI.Label(new Rect(150, 80, 200, 30), "[Предмет собран]"); // выводит надпись;
      }
  }
   GUI.Label(new Rect(20, 100, 100, 30), "Деньги: " +Money); // отображает количество денег на экране;
    }
}

Поместите этот скрипт на вашего персонажа и измените его тэг на Player.

Выбор тэга Player

Скрипт missionbot

UnityEngine;
using System.Collections;

public class MissionBot : MonoBehaviour

{

Видео:Unity3D Урок 34 [Миссии, тип "Принеси"]Скачать

Unity3D Урок 34 [Миссии, тип "Принеси"]
public bool quest; //переменная, которая обозначает взят квест или нет; public bool vis; // переменная, которая будет отображать диалог между персонажами; public string missionText; // Текст который будет отображать наименование квеста; public string missionTag; //Тэг объекта, который необходимо принести; private MissionPlayer MP; // подключаем скрипт MissionPlayer; void Start() { MP = GameObject.FindGameObjectWithTag("Player").GetComponent<MissionPlayer>(); // определяем что скрипт MissionPlayer будет находится на персонаже с тэгом player; } void Update() { GameObject MissionTagScanner = GameObject.FindGameObjectWithTag("Player"); // персонаж у которого берем квест будет взаимодействовать только с тем объектом у которого тэг Player; if (Input.GetKeyDown(KeyCode.E) & Vector3.Distance(transform.position, MissionTagScanner.transform.position) < 2) // При нажатии на клавишу Е и при дистанции между персонажами меньше чем 2; { vis = true; // переменная vis принимает значение true; } } void OnGUI() { if (vis) // если переменная равна true; { if (!quest) // и если квест еще не взят; { GUI.Box(new Rect((Screen.width - 300) / 2, (Screen.height - 300) / 2, 300, 300), "Квест"); // то на экране отображается окно с названием Квест; GUI.Label(new Rect((Screen.width - 300) / 2 + 5, (Screen.height - 300) / 2 + 15, 290, 250), "Принеси мне сферу"); // и текстом который описывает квест; if (GUI.Button(new Rect((Screen.width - 100) / 2, (Screen.height - 300) / 2 + 250, 100, 40), "Ок")) // при нажатии на кнопку Ok; { quest = true; // квест взят; MP.quest = true; // отображает название квеста на экране; MP.MissionText = "Принести сферу"; // текст квеста; MP.ObjectTag = missionTag; // тэг объекта который необходимо принести; vis = false; // все диалоговые окна закрываются; } } else { // если же квест уже взят; GUI.Box(new Rect((Screen.width - 300) / 2, (Screen.height - 300) / 2, 300, 300), "Квест"); GUI.Label(new Rect((Screen.width - 300) / 2 + 5, (Screen.height - 300) / 2 + 15, 290, 250), "Принес?"); //то описание квеста меняется на другой текст; if (MP.MissionObjects) // если вы уже подобрали объект; { if (GUI.Button(new Rect((Screen.width - 100) / 2, (Screen.height - 300) / 2 + 250, 100, 40), "Да")) // то появится кнопка да, при нажатии на которую; { quest = false; // переменная квест принимает значение false, т.е. не взят ; MP.quest = false; // название квеста не будет отображаться на экране ; MP.MissionText = ""; // убирается название квеста; MP.ObjectTag = ""; // обнуляется тэг объекта; MP.MissionObjects = false; // объект считается не подобранным; MP.Money = MP.Money + 100; //добавление денег за выполнение квеста; vis = false; // диалоговое окно закрывается; } } else { // если вы еще не подобрали объект; if (GUI.Button(new Rect((Screen.width - 100) / 2, (Screen.height - 300) / 2 + 250, 100, 40), "Нет")) // то вместо кнопки да, будет кнопка нет; { vis = false; // при нажатии на которую, окно просто закроется; } } } } } }

Сохраните скрипт. И повешайте его на персонажа с которым нужно поговорить (Cube). В поле missionTag укажите тэг sphere, который необходимо добавить.

Скрипт missionbot на втором персонаже

Добавление тэга.

Добавление тэга в Unity5

Добавление тэга

Скрипт MissionObject

using UnityEngine;
using System.Collections;

public class MissionObject : MonoBehaviour

Видео:Задания в Unity 5 | Уроки по вашим заявкамСкачать

Задания в Unity 5 | Уроки по вашим заявкам
{ private MissionPlayer MP; // опять подключаем скрипт MissionPlayer; void Start() { MP = GameObject.FindGameObjectWithTag("Player").GetComponent<MissionPlayer>(); } // определяем что скрипт MissionPlayer будет находится на персонаже с тэгом player; void OnMouseUp() { if (Input.GetMouseButtonUp(0)) // если при нажатии на правую кнопку мыши; { if (MP.ObjectTag == gameObject.tag) // и при том что тэг объекта равен тому значению которое написано в ObjectTag; { MP.MissionObjects = true; // то переменная принимает значение true, т.е. считается что предмет собран; Destroy(gameObject); // и удаляем этот объект со сцены; } } } }

Вешаем этот скрипт на объект, который необходимо подобрать (Sphere) и меняем его тэг на sphere.

Выбор тэга на сфере

На этом создание квеста закончено, конечно же, можно создать, для примера, более сложную систему квестов, с несколькими окнами, с возможностью выбора квеста, с добавлением каких-то предметов за выполнение квеста или добавление опыта, но мы пока ограничимся этими функциями, которые описывают основные возможности, а остальное зависит от вашей фантазии.

Проверьте правильность выбора всех тэгов, ваш персонаж – тэг Player, предмет для подбора – тэг который мы указали sphere. Так же, проверьте поле missionTag в скрипте missionbot. Там должен быть указан тэг предмета, который нужно подобрать.  Запустите игру и посмотрите как работает выполнение квеста.

Из возможных «багов», которые могут возникнуть, это проблемы с отображением курсора. Если у вас возникли другие проблемы  или предложения, пишите в комментариях, мы обязательно ответим. Использовано Unity 5.3.2f1 (64-bit).

Предыдущий урок

Следующий урок

💡 Видео

Unity Rpg - Урок 9 - Опыт, Квест, LevelUpСкачать

Unity Rpg - Урок 9 - Опыт, Квест, LevelUp

Создание миссии на UNITY 5Скачать

Создание миссии на UNITY 5

Unity, квестовая система / quest systemСкачать

Unity, квестовая система / quest system

Генератор квестов формата: Подай принеси. Квесты для D&D. (По Ту Сторону Страниц)Скачать

Генератор квестов формата: Подай принеси. Квесты для D&D. (По Ту Сторону Страниц)

Квест в стиле нуар на UnityСкачать

Квест в стиле нуар на Unity

Программирование 2 курс: разработка квеста на Unity3D!Скачать

Программирование 2 курс: разработка квеста на Unity3D!

Система Заданий/Миссий - Unity3d - IndiReplayСкачать

Система Заданий/Миссий - Unity3d - IndiReplay

Unity 3d Horror/RPG/Quest Alpha GameplayСкачать

Unity 3d Horror/RPG/Quest Alpha Gameplay

Я создал игру на unity 3d деревня квест!Скачать

Я создал игру на unity 3d деревня квест!

КвестПроект Урок1_Подготовка проектаСкачать

КвестПроект Урок1_Подготовка проекта

Unity3D Урок 35 [Миссии, тип "Поговори"]Скачать

Unity3D Урок 35 [Миссии, тип "Поговори"]

RPG MAKER MV●УРОК #2 СОЗДАНИЕ ПРОСТОГО КВЕСТАСкачать

RPG MAKER MV●УРОК #2 СОЗДАНИЕ ПРОСТОГО КВЕСТА

Уроки по Unity3d #1 - Интерфейс (перезалив)Скачать

Уроки по Unity3d #1 - Интерфейс (перезалив)

Работаем над 1.0.9. Принципы создания системы заданий (системы квестов).Скачать

Работаем над 1.0.9.  Принципы создания системы заданий (системы квестов).

|Делаю игру|: Квест и метроидвания, сразу две игры - Часть 001 - (Unreal Engine 5).Скачать

|Делаю игру|: Квест и метроидвания, сразу две игры - Часть 001 - (Unreal Engine 5).

Тестовое задание unity C# на 4500$. Cмотрим и рефакторимСкачать

Тестовое задание unity C# на 4500$. Cмотрим и рефакторим

Unity3D RPG : Quest for Power #1Скачать

Unity3D RPG : Quest for Power #1

Создаем игру Need for Speed на Unity. Урок 5. Игровые задания.Скачать

Создаем игру Need for Speed на Unity. Урок 5. Игровые задания.
Поделиться или сохранить к себе:
Технологичная помощь
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных, принимаю Политику конфиденциальности и условия Пользовательского соглашения.

  1. Expert

    У вас не правильно после .GetComponent! Правильно: .GetComponent();
    Будьте внимательны!

    Ответить
  2. Marina

    Как подкоючить Mission Player скрипт к другому скрипту

    Ответить