Hallo. I want to create FPS. I was finding gun shoot script for 2 days. I found narutoisgreat1234's Raycast shoot script. Here is it with my small modifications. :`
var Range : float = 1000;
var Force : float = 1000;
var Clips : int = 20;
var BulletPerClip : int = 60;
var RelaodTime : float = 3.3;
var Damage : int = 10;
var MoveSpeed: float = 1;
var BulletsLeft : int = 0;
var ShootTimer : float = 0;
var ShootCooler : float = 0.5;
public var ShootAudio : AudioClip;
public var ReloadAudio : AudioClip;
public var muzzleFlash : ParticleEmitter;
public var hitParticles : ParticleEmitter;
public var muzzleFlashTimer : float = 0;
public var KeyCooler : float = 0.5;
public var KeyTimer : float = 0;
public var muzzleFlashCooler : float = 0.5;
public var Lights1 : GameObject;
public var Lights2 : GameObject ;
public var Lights3 : GameObject;
function Start(){
BulletsLeft = BulletPerClip;
muzzleFlash.emit = false;
DefaultPos = transform.localPosition;
hitParticles.emit = false;
}
function Update () {
if( KeyTimer > 0){
KeyTimer -= Time.deltaTime;
}
if( KeyTimer < 0){
KeyTimer= 0;
}
if( muzzleFlashTimer > 0){
muzzleFlashTimer -= Time.deltaTime;
MuzzleFlash();
}
if( muzzleFlashTimer < 0){
muzzleFlashTimer = 0;
}
if( ShootTimer > 0){
ShootTimer -= Time.deltaTime;
}
if(ShootTimer < 0){
ShootTimer = 0;
}
if( KeyTimer == 0){
if(Input.GetMouseButton(0) && BulletsLeft ){
if( ShootTimer == 0){
PlayShootAudio();
RayShoot();
ShootTimer = ShootCooler;
KeyTimer = KeyCooler;
}
if( muzzleFlashTimer == 0){
muzzleFlashTimer = muzzleFlashCooler;
MuzzleFlash ();
}
}
}
}
function MuzzleFlash (){
if( muzzleFlashTimer > 0){
muzzleFlash.emit = false;
Lights1.active = false;
Lights2.active = false;
Lights3.active = false;
}
if( muzzleFlashTimer == muzzleFlashCooler){
muzzleFlash.transform.localRotation = Quaternion.AngleAxis(Random.value * 360 * 2000000, Vector3.forward);
muzzleFlash.emit = true;
Lights1.active = true;
Lights2.active = true;
Lights3.active = true;
}
}
function RayShoot (){
//GameObject.Find("m1911pistoleReloadandShooting").animation.Play("Shoot"); //(if your player has animations then remove the // infront of the GameObject.Find and then
//(replace your objetcs name there. and then the animation name)
var hit : RaycastHit;
var direction : Vector3 = transform.TransformDirection( Vector3.forward);
Debug.DrawRay(transform.position , direction * Range , Color.blue);
if(Physics.Raycast(transform.position , direction , hit, Range)){
var hitRotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
if(hit.rigidbody){
if( hitParticles){
hitParticles.transform.position = hit.point;
hitParticles.transform.localRotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
hitParticles.Emit();
hit.rigidbody.AddForceAtPosition( direction * Force , hit.point);
hit.collider.SendMessageUpwards("ApplyDamage" , Damage , SendMessageOptions.DontRequireReceiver);
}
}
}
BulletsLeft --;
if(BulletsLeft < 0){
BulletsLeft = 0;
}
if( BulletsLeft == 0 ){
Reload();
}
}
function Reload (){
PlayReloadAudio();
yield WaitForSeconds(0.2);
//GameObject.Find("m1911pistoleReloadandShooting").animation.Play("Reload"); //(if your player has animations then remove the // infront of the GameObject.Find and then
//(replace your objetcs name there. and then the animation name)
yield WaitForSeconds( RelaodTime);
if(Clips > 0){
BulletsLeft = BulletPerClip;
Clips -= 1;
}
}
function PlayShootAudio(){
audio.PlayOneShot( ShootAudio);
}
function PlayReloadAudio(){
audio.PlayOneShot( ReloadAudio);
}
`
Now what's my problem. When i shoot, drawray (debug blue line) goes down and i can't interact with others things because drawray is down. Thanks in advance !