Как сделать квест типа «Принеси» в 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Unity 3d Horror/RPG/Quest Alpha Gameplay

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

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

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

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

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

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

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

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

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

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

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

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

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

Unity3D RPG : Quest for Power #1
Поделиться или сохранить к себе:
Технологичная помощь
Добавить комментарий

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

  1. Expert

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

    Ответить
  2. Marina

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

    Ответить