Данный примерчик был написан для 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);
}
}
}
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 () {
}
}
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 );
}
}
}
}
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);
}
}
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);
}
}