Unity 5. Создание полезных предметов для персонажа

В любой игре присутствую полезные предметы для персонажей или групп, например это всевозможные аптечки, увеличивающие здоровье персонажа, различные вспомогательные эффекты, типа увеличения силы, скорости или ловкости ит.д. Такие же предметы мы и попробуем создать в нашем примере. В blender'e на скорую руку я "смастерил" несколько предметов, перенес их в Unity и немного "разукрасил". Предметы который будет увеличивать энергию, здоровье и прибавление времени. predmeti Скачать можно здесь Так же, на сцене, присутствует персонаж над которым мы и будем немного издеваться. Создадим скрипт в котором пропишем уровень здоровья, энергии и времени, и назовем его 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;
    }
}
Разместим этот скрипт на персонаже и добавим компонент Canvas на сцену где будут находится 2 слайдера (здоровье и энергия) и компонент Text, где будет отображаться время. Укажем эти компоненты в скрипте PersState. pers slider Теперь поиграемся немного с нашими "бафами". Создадим на каждом предмете 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;
            }
        }
    }


    void OnDrawGizmosSelectes()
    {
        Gizmos.color = new Color(1, 0, 0, 0.5f);
        Gizmos.DrawCube(transform.localPosition + center, size);
    }
}
Поместим этот скрипт на отдельный компонент (пустышку) на сцене и укажем точку откуда будут начинать появляться  предметы и диапазон (в пределах какой зоны будут они появляться), так же укажем наши предметы. randompredmet Дальше укажем для каждого предмета, что они будут пополнять при взаимодействии персонажа с ними. Для каждого из них напишем скрипт. Для предмета который пополняет здоровье скрипт 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);
        }
    }
}
baf Поместим скрипты на предметы и не забываем все сохранять. Теперь, если у вас есть желание можете проверить (запустить игру). Если все настроено верно, персонаж со скриптом отвечающий за здоровье, энергию и время, пустышка со скриптом отвечающий за размещение предметов на сцене и сами предметы со скриптами на увеличение значений персонажа, то все должно сработать. На сцене через какое-то время будут появляться предметы, которые при столкновении с персонажем будут поднимать его статистики и исчезать после этого. В моем случаем, у меня есть заготовка, где персонаж должен толкать некие предметы в определенную точку, естественно будет тратится энергия, здоровье и тикать время, на видео вы можете все посмотреть.

P.S. Если у вас возникнут вопросы по данной теме, можете задавать их в комментариях или в группе ВК. Удачных проектов!
Похожие статьи
Unity 2d Как создать кликер
1 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 5

734 просмотров всего, 2 просмотров сегодня

0
#Unity 5#2D
Подробнее
Как заставить персонажа двигаться в Unity 2d
1 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 5

1,683 просмотров всего, 3 просмотров сегодня

0
#Unity 5#2D
Подробнее
2d анимация в unity
2 оценки, среднее: 4,50 из 52 оценки, среднее: 4,50 из 52 оценки, среднее: 4,50 из 52 оценки, среднее: 4,50 из 52 оценки, среднее: 4,50 из 5

714 просмотров всего, 3 просмотров сегодня

0
#Unity 5#2D
Подробнее
Как добавить видео в Unity 5
1 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 51 оценка, среднее: 5,00 из 5

2,259 просмотров всего, 8 просмотров сегодня

0
#Unity 5
Подробнее
Добавить комментарий
Оцените статью
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд
Загрузка...

Ваш e-mail не будет опубликован.