//Скрипт стрельбы от CHapaeFF //http://vk.com/pixelfox ]var Model : Animation; //модель с анимациями
var range = 100.0; var fireRate = 0.05; //задержка между вылетом пуль var force = 100.0; // ускорение пули var damage = 5.0; // урон он нее var bulletsPerClip = 17; //пулей в магазине var clips = 2; // Магазинов var reloadTime = 0.7; // время перезарядки var accuracy = 1; // разброс var currentMode = fireMode.semi; //режим стрельбы (Одиночный/авто) var ShootKey : KeyCode; // кнопка стрельбы var ReloadKey : KeyCode; // кнопка перезарядки
var soundFire : AudioClip; var soundReload : AudioClip; var soundEmpty : AudioClip; var bulletHolePrefab : GameObject; var bulletHolePrefabWall : GameObject; var bulletHolePrefabBlood : GameObject; var bulletHoleMetal : GameObject; var layerMask : LayerMask; var muzzleFlash : Renderer;
enum fireMode { none, semi, auto} private var bulletsLeft : int = 0; private var allBullets; private var nextFireTime = 0.0; private var mainCamera; private var sound : AudioSource; private var reload : boolean; //var Crosshair : CrossHair; var DrawTime = 1;
var guiStyle : GUISkin; var hud : Texture; var gunName : String;
function Start () { yield WaitForSeconds(DrawTime);
// Keep firing until we used up the fire time while( nextFireTime < Time.time && bulletsLeft != 0) { FireOneShot(); nextFireTime += fireRate; } }
function FireOneShot () { //var direction = transform.TransformDirection(Vector3.forward); var direction = transform.TransformDirection(Vector3(Random.Range(-0.01, 0.01) * accuracy, Random.Range(-0.01, 0.01) * accuracy,1)); var hit : RaycastHit;
// Проверяем попала ли куда-нибудь пуля if (Physics.Raycast (mainCamera.transform.position, direction, hit, range,layerMask.value)) { var rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
// если пуля попадает в физический объект то двигаем его if (hit.rigidbody) hit.rigidbody.AddForceAtPosition(force * direction, hit.point);
// если пуля попала в объект "Untagged" то сделать на нем дырку и приклеить ее к объекту if (hit.transform.tag == "Untagged") { var bulletHole : GameObject = Instantiate (bulletHolePrefab, hit.point, rotation); bulletHole.transform.parent = hit.transform; hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver); }
if (hit.transform.tag == "Concrete") { var bulletHoleWall : GameObject = Instantiate (bulletHolePrefabWall, hit.point, rotation); bulletHoleWall.transform.parent = hit.transform; hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
}
if (hit.transform.tag == "Enemy") { var bulletHoleBlood : GameObject = Instantiate (bulletHolePrefabBlood, hit.point, rotation); bulletHoleBlood.transform.parent = hit.transform; hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
}
if (hit.transform.tag == "Metal") { var bulletHoleMetal : GameObject = Instantiate (bulletHoleMetal, hit.point, rotation); bulletHoleMetal.transform.parent = hit.transform; hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
}
}
sound.PlayOneShot(soundFire);
Model.animation.Rewind("fire");
Model.animation.CrossFade("fire");
bulletsLeft--;
StartCoroutine(ShowMuzzleFlash());
}
// перезарядка function Reload () {
if (allBullets >0 && bulletsLeft != bulletsPerClip) {
if (allBullets > bulletsPerClip) {
//Crosshair.EnableCrosshair = false;
reload = true;
sound.PlayOneShot(soundReload);
Model.animation.CrossFade("reload");
yield WaitForSeconds(reloadTime);
allBullets-= bulletsPerClip-bulletsLeft;
bulletsLeft =bulletsPerClip;
reload = false;
//Crosshair.EnableCrosshair = true;
} else {
reload = true;
sound.PlayOneShot(soundReload);
yield WaitForSeconds(reloadTime);
var bullet = Mathf.Clamp(bulletsPerClip,allBullets,bulletsLeft+allBullets);
+ в репу если помог --------------------------------------------------------------------------------------- Throw Exception (ノಠ益ಠ)ノ彡┻━┻ Catch Exception ┬──┬ ノ( ゜-゜ノ)
Сообщение отредактировал chapaeff - Вс, 02 Мар 2014, 16:24