4 Создание прицела, вспышка при стрельбе, таймауты

using UnityEngine;
using System.Collections;

public class Shooting : MonoBehaviour {

 	public Transform bullet; //Префаб патрона
	public GUISkin MySkin;	//Ссылка на наш скин
	public Texture2D AimTexture; //публичная переменная для текстуры прицела
	public Transform MuzzleFlash; //публичная переменная для префаба вспышки
	public int BulletForce = 5000; //Скорость патрона
 	private int CurAmmoCount = 10; //Текущее кол-во патронов в обойме
	public int MaxAmmoCount = 10; //Максимальное число патронов в обойме
	public int CurCatrige = 9;	//Текущее число обойм
	public int MaxCatrige = 9;	//Максимальное число обойм (пока не используется)
 	public AudioClip Fire; //Аудиоклип воспроизводящийся во время стрельбы
 	public AudioClip Reload; //Аудиоклип воспроизводящийся во время перезарядки
	public int AmmoBoxWidth = 200;	//Ширина выводимого окна с информацией о кол-ве патронов
	public int AmmoBoxHeight = 100; //Высота выводимого окна с информацией о кол-ве патронов
	private float ReloadTimer = 0.0f; //Переменная для таймаута перезарядки
	private float MuzzleFlashLifetime = 0.0f; //Время жизни вспышки	
	public int OffsetAimX;				//оффсет прицела по х
	public int OffsetAimY;				//оффсет прицела по y
	
 	// Use this for initialization
	 void Start () 						
	{
		MuzzleFlash.active = false;	// вспышка невидима
	}

 	// Update is called once per frame
 	void Update ()
 	{
	 	if(Input.GetMouseButtonDown(0)&CurAmmoCount>0&ReloadTimer<=0) //Если нажата ЛКМ и кол-во патронов больше 0
	 		{
				Shoot();
			}
		 if(Input.GetButtonDown("Reload Weapon")&CurCatrige>0&ReloadTimer<=0) //Если нажата кнопка Reload Weapon
			 {
			ReloadTimer = 1.5f;
			CurCatrige = CurCatrige - 1;	//-1 обойма
			CurAmmoCount = MaxAmmoCount; 	//Число патронов в обойме = максимальному числу патронов
			audio.PlayOneShot(Reload); 		//проигрываем звук перезарядки
			 }
		if(ReloadTimer>0)					//если таймер больше 0
		{
			ReloadTimer -= Time.deltaTime; //Переменная перезарядки уменьшается с течением времени
		}
				if(MuzzleFlashLifetime>0) //если время жизни вспышки больше 0
		{
			MuzzleFlashLifetime -= Time.deltaTime; 	//Переменная времени жизни вспышки уменьшается с течением времени
		}
		 if(MuzzleFlashLifetime<=0)					//если время жизни вспышки больше 0 
		{
			MuzzleFlash.active = false;				// вспышка невидима
		}
 	}
	void Shoot()
	{
			Transform BulletInstance = (Transform) Instantiate(bullet, GameObject.Find("BulletSpawnPoint").transform.position, Quaternion.identity); //Генерится префаб патрона в координатах объекта "BulletSpawnPoint"
			BulletInstance.rigidbody.AddForce(transform.forward * BulletForce); //Сгенерированый патрон отправляется вперед со скоростью "BulletForce"
			CurAmmoCount = CurAmmoCount - 1; //-1 патрон
			audio.PlayOneShot(Fire); //проигрываем звук выстрела
			MuzzleFlash.active = true; //вспышка от выстрела видна
			MuzzleFlashLifetime = 0.1f; //установка времени жизни вспышки
	}
	void OnGUI()
	{
		GUI.DrawTexture(new Rect((Screen.width-AimTexture.width)/2-OffsetAimX,(Screen.height-AimTexture.height)/2-OffsetAimY,AimTexture.width,AimTexture.height), AimTexture); // выводим текстуры прицела
		GUI.skin = MySkin;					//Скин используемый для внешнего вида окон расположеных под этой строкой
		GUI.Box(new Rect(Screen.width-AmmoBoxWidth,0,AmmoBoxWidth,AmmoBoxHeight), "Ammo:"+CurAmmoCount+"/"+MaxAmmoCount); //Вывод окна с инфой о патронах
		GUI.Label(new Rect(Screen.width-AmmoBoxWidth,0,AmmoBoxWidth,AmmoBoxHeight), "Catrige:"+CurCatrige); //Вывод текста с инфой о обоймах
	}
 }

Комментарии к этому посту

  • Zorro2121
    24.06.2014 at 17:00

    спасибо, сначала ничего не получалось снаряд висел в воздухе а посмотрев ваше видео все пошло по плану


  • Иван
    07.08.2014 at 07:35

    Пишет Assets/Gun.cs(72,5): error CS8025: Parsing error , что делать?


  • денис
    28.10.2014 at 18:38

    помоги пожалуйста я не могу вспышку сделать она у меня почему то при стрельбе то есть то нет


  • alex
    09.11.2014 at 15:11

    ну где мне щас взять гуи скин?


  • матвей
    19.05.2015 at 19:35

    Выдаёт ошибку, что unity не понимает слово active. Помогите



Оставить комментарий