Главная » Статьи » 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);
        }
}
 
Категория: Unity3D | Добавил: АДМИН (2012/Авг/19) | Автор: Enemy + Bullet + HealthBar : Проект
Просмотров: 1862 | Теги: Проект и урок, bullet, enemy, HealthBar | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]