В любой игре присутствую полезные предметы для персонажей или групп, например это всевозможные аптечки, увеличивающие здоровье персонажа, различные вспомогательные эффекты, типа увеличения силы, скорости или ловкости ит.д. Такие же предметы мы и попробуем создать в нашем примере.
В blender’e на скорую руку я «смастерил» несколько предметов, перенес их в Unity и немного «разукрасил». Предметы который будет увеличивать энергию, здоровье и прибавление времени.
Так же, на сцене, присутствует персонаж над которым мы и будем немного издеваться. Создадим скрипт в котором пропишем уровень здоровья, энергии и времени, и назовем его PersState
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class PersState : MonoBehaviour { public int PlayerZdorobe = 100; public float PlayerEnergi = 100 ; public float PlayerVrema = 900; public Slider Energi; public Slider Zdorove; public Text Vrema; // Use this for initialization void Start () { } // Update is called once per frame void Update () { PersVrema(); PersEnergi(); } public void PersZdorov() { if (PlayerZdorobe < 0) { PlayerZdorobe = 0; } if (PlayerZdorobe > 100) { PlayerZdorobe = 100; } Zdorove.value = PlayerZdorobe; } public void PersEnergi() { //данная функция будет работать только у меня, вы же на уменьшения энергии можете взять что-то свое или брать эту функцию if (this.gameObject.GetComponent().__push == true) { PlayerEnergi = PlayerEnergi - Time.deltaTime; } else { PlayerEnergi = PlayerEnergi + Time.deltaTime/2; } if (PlayerEnergi < 0) { PlayerEnergi = 0; } if (PlayerEnergi > 100) { PlayerEnergi = 100; } Energi.value = PlayerEnergi; } public void PersVrema() { PlayerVrema = PlayerVrema - Time.deltaTime; Vrema.text = "" + (int)PlayerVrema; } }Видео:САМАЯ ПРОСТАЯ РЕАЛИЗАЦИЯ ПОДБОРА ПРЕДМЕТОВ В UNITYСкачать
Разместим этот скрипт на персонаже и добавим компонент Canvas на сцену где будут находится 2 слайдера (здоровье и энергия) и компонент Text, где будет отображаться время. Укажем эти компоненты в скрипте PersState.
Теперь поиграемся немного с нашими «бафами». Создадим на каждом предмете box collaider и поставим галочку isTrigger, и сохраним каждый предмет в Префаб. Далее создадим скрипт, который будет раскидывать наши предметы в рандомном месте. Назовем его PredmetRandomStart
using System.Collections; using System.Collections.Generic; using UnityEngine;public class PredmetRandomStart : MonoBehaviour { public Vector3 center; public Vector3 size; public GameObject zdorove; public GameObject energi; public GameObject vrema; public float timerzdorove; public float timerenergi; public float timervrema; public bool timer1 ; public bool timer2 ; public bool timer3 ; void Start() { timerzdorove = Random.Range(10, 50); timerenergi = Random.Range(10, 50); timervrema = Random.Range(10, 50); } private void Update() { SpawnZdorove(); SpawnEnergi(); SpawnVrema(); } public void SpawnZdorove() { if (timer1) { timerzdorove -= Time.deltaTime; if (timerzdorove <= 0) { Vector3 pos = center + new Vector3(Random.Range(-size.x / 2, size.x / 2), Random.Range(-size.y / 2, size.y / 2), Random.Range(-size.z / 2, size.z / 2)); Instantiate(zdorove, pos, Quaternion.Euler(0f, 0f, -90f)); timerzdorove = Random.Range(10, 50); timer1 = false; } } } public void SpawnEnergi() { if (timer2) { timerenergi -= Time.deltaTime; if (timerenergi <= 0) { Vector3 pos2 = center + new Vector3(Random.Range(-size.x / 2, size.x / 2), Random.Range(-size.y / 2, size.y / 2), Random.Range(-size.z / 2, size.z / 2)); Instantiate(energi, pos2, Quaternion.Euler(0f, 0f, -90f)); timerenergi = Random.Range(10, 50); timer2 = false; } } } public void SpawnVrema() { if (timer3) { timervrema -= Time.deltaTime; if (timervrema <= 0) { Vector3 pos3 = center + new Vector3(Random.Range(-size.x / 2, size.x / 2), Random.Range(-size.y / 2, size.y / 2), Random.Range(-size.z / 2, size.z / 2)); Instantiate(vrema, pos3, Quaternion.Euler(0f, 0f, -90f)); timervrema = Random.Range(10, 50); timer3 = false; } } }Видео:КАК ПОДБИРАТЬ ПРЕДМЕТЫ В UNITY 3D???Скачать
void OnDrawGizmosSelectes() { Gizmos.color = new Color(1, 0, 0, 0.5f); Gizmos.DrawCube(transform.localPosition + center, size); } }Видео:Как брать и бросать оружие или другие объекты в UnityСкачать
Поместим этот скрипт на отдельный компонент (пустышку) на сцене и укажем точку откуда будут начинать появляться предметы и диапазон (в пределах какой зоны будут они появляться), так же укажем наши предметы.
Дальше укажем для каждого предмета, что они будут пополнять при взаимодействии персонажа с ними. Для каждого из них напишем скрипт.
Для предмета который пополняет здоровье скрипт HealthBaf
using System.Collections; using System.Collections.Generic; using UnityEngine; public class HealthBaf : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { }public void OnTriggerEnter(Collider other) { if (other.gameObject.name == "pers3") { other.GetComponent().PlayerZdorobe = other.GetComponent().PlayerZdorobe + Random.Range(10, 30); GameObject.FindGameObjectWithTag("Scene").GetComponent().timer1 = true; Destroy(gameObject); } } }Видео:КАК СДЕЛАТЬ ВЫБОР ПЕРСОНАЖА В ИГРЕ? | Простой способСкачать
Для предмета который пополняет энергию скрипт Energibaf
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Energibaf : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } public void OnTriggerEnter(Collider other) { if (other.gameObject.name == "pers3") { other.GetComponent().PlayerEnergi = other.GetComponent().PlayerEnergi + Random.Range(10, 30); GameObject.FindGameObjectWithTag("Scene").GetComponent().timer2 = true; Destroy(gameObject); } } }
Для предмета который пополняет время скрипт VremaBaf
using System.Collections; using System.Collections.Generic; using UnityEngine; public class VremaBaf : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } public void OnTriggerEnter(Collider other) { if (other.gameObject.name == "pers3") { other.GetComponent().PlayerVrema = other.GetComponent().PlayerVrema + Random.Range(10, 30); GameObject.FindGameObjectWithTag("Scene").GetComponent().timer3 = true; Destroy(gameObject); } } }
Видео:Unity ScriptableObject. Пишем простой инвентарьСкачать
Поместим скрипты на предметы и не забываем все сохранять. Теперь, если у вас есть желание можете проверить (запустить игру). Если все настроено верно, персонаж со скриптом отвечающий за здоровье, энергию и время, пустышка со скриптом отвечающий за размещение предметов на сцене и сами предметы со скриптами на увеличение значений персонажа, то все должно сработать. На сцене через какое-то время будут появляться предметы, которые при столкновении с персонажем будут поднимать его статистики и исчезать после этого.
В моем случаем, у меня есть заготовка, где персонаж должен толкать некие предметы в определенную точку, естественно будет тратится энергия, здоровье и тикать время, на видео вы можете все посмотреть.
P.S. Если у вас возникнут вопросы по данной теме, можете задавать их в комментариях или в группе ВК. Удачных проектов!
🔥 Видео
Уроки Unity / Как добавить персонажа (бегает и прыгает)Скачать
Как подобрать/бросить предмет в Unity 2dСкачать
Кастомизация персонажа в Unity / Смена одежды и аксессуаров в реалтайме / Как создать игру [Урок 25]Скачать
КАК СДЕЛАТЬ МАГАЗИН СКИНОВ | ПРОСТАЯ ИГРА НА Unity | 6 частьСкачать
ИНВЕНТАРЬ В UNITY #4 || Unity C# Уроки Создание Игр На Андроид 2DСкачать
Как сделать игру на UNITY в 3D?! Передвижение персонажаСкачать
Создаю систему крафта для своей игрыСкачать
Что такое Trigger и Collision | Взаимодействие объектов в UnityСкачать
Инвентарь и система предметов #1 | Создание 2D PixelArt RPG в Unity#9Скачать
Управление персонажем в Unity 2021Скачать
2D Инвентарь в Unity - легкоСкачать
Полезные ассеты Unity. Карта разработчика в коментахСкачать