Главная » Статьи » Unity3D | [ Добавить статью ] |
Enemy + Bullet + HealthBar : Проект и урок
http://rghost.ru/32661141
Данный примерчик был написан для reimon245 Возможно, другим тоже понадобится. Весьма простой. Суть: есть враг, в которого мы стреляем шарами. Шар отнимает здоровье у врага. После первого попадания в врага появляется бар его здоровья, далее отображает его. Скрипт, который вешается на пустой объект с именем Bar и отображает бар здоровья: Синтаксис: Используется csharp using UnityEngine; using System.Collections; public class HealthBar : MonoBehaviour { //Для показа и скрытия бара public bool showBar; //Ширина бара public float barWidth; //Высота бара public float barHeight; //Хп, которое будет отображаться в баре public int health; public int healthMax; // Use this for initialization void Start () { //Скрываем бар при старте showBar = false; } // Update is called once per frame void Update () { } void OnGUI() { //Если бар показывается if (showBar) { //Создаём строку, которая будет отображаться в 2 вариантах string str; if (health > 0) {str = health+" / "+healthMax;} else {str = "Dead";} //Рисуем бар GUI.Box( new Rect ( Screen.width/2 - barWidth/2, barHeight, barWidth, barHeight), str); } } } Скрипт, который вешается на врага и хранит переменные о его здоровье: Синтаксис: Используется csharp using UnityEngine; using System.Collections; public class Health : MonoBehaviour { //Хп врага public int health; public int healthMax; // Use this for initialization void Start () { //Хп становится максимальным при старте health = healthMax; } // Update is called once per frame void Update () { } } Скрипт, который вешается на камеру. !!! Камера без Collider. Иначе, добавьте игнорирование коллайдера !!! Синтаксис: Используется csharp using UnityEngine; using System.Collections; public class Shoot : MonoBehaviour { //Префаб с пулей public GameObject bullet; //Сила выстрела public float force; // Use this for initialization void Start () { } // Update is called once per frame void Update () { //Если нажимается левая кнопка мыши if( Input.GetMouseButtonDown(0) ) { //Если префаб с пулей указан if (bullet) { //Создаётся объект (объект, точка создания, его ротация) GameObject go = Instantiate(bullet, transform.position, transform.rotation) as GameObject; //Придание объекту ускарение с помощью импульса go.rigidbody.AddForce(transform.forward * force, ForceMode.Impulse ); } } } } Скрипт, который вешается на пулю: Синтаксис: Используется csharp using UnityEngine; using System.Collections; public class Bullet : MonoBehaviour { //Величина урона public int damage; //Объект со скриптом бара public GameObject barObject; public HealthBar healthBarScript; // Use this for initialization void Start () { //Находим бар barObject = GameObject.Find("Bar"); //Получаем бар с найденного объекта healthBarScript = barObject.GetComponent<HealthBar>(); } // Update is called once per frame void Update () { } void OnCollisionEnter (Collision collision) { //Отправляет сообщение в лог с тегом врага Debug.Log(collision.transform.tag); //Проверка тега объекта if (collision.transform.tag=="Enemy") { //Получаем скрипт Health с объекта коллизии Health healthScript = collision.transform.GetComponent<Health>(); //Если мы смогли получить оба скрипта if( healthScript && healthBarScript) { //Делаем урон врагу healthScript.health -= damage; //Если хп стало меньше нуля, то ставим 0 if (healthScript.health < 0) { healthScript.health = 0; } //Отправляем в бар инормацию об хп и хп максимальном врага healthBarScript.health = healthScript.health; healthBarScript.healthMax = healthScript.healthMax; //Показывавем бар healthBarScript.showBar = true; } //Если у нас нет скриптов else { Debug.Log("No scripts"); } } //Удаляем объект Destroy(gameObject); } } | |
Просмотров: 3934 | | |
Всего комментариев: 0 | |