- Home /
When reloading my gun sounds and the bullets glitch out.
Okay so I have a gun it can aim and shoot, Its automatic (so it shoos when holding down mouse 0 not clicking.) I have a Empty Game Object for the bullet spawn. When i shoot the first mag is fine (30 bullets per mag.)
But the next mag the sound is messed up some bullets are invisible and sometimes it shoots way more than 30 bullets.
Here is a link to a youtube vid of it: http://www.youtube.com/watch?v=Zt4le1G0iYo&feature=youtu.be
I have 3 scripts: Gun (the main one) GunAnimation (For fire/Reloading animation's) Aim (for aiming)
Here are the scripts
Gun:
var Bullet : Rigidbody;
var Spawn : Transform;
var BulletSpeed : float = 1000;
var ReloadTime : float = 2;
var AmmoInMag : float = 30;
var IsFullAuto = true;
static var AmmoLeft : float;
static var ReloadTTime : float;
private var CanFire = true;
var FireRate = 0.1;
static var IsReloading = false;
function Start () {
AmmoLeft = AmmoInMag;
ReloadTTime = ReloadTime;
}
function Update () {
if(IsFullAuto == false) {
if(Input.GetButtonDown("Fire1")){
if(AmmoLeft > 0) {
BroadcastMessage("FireAnim");
Fire();
}
}
}
else{
if(Input.GetButton("Fire1")){
if(AmmoLeft > 0) {
BroadcastMessage("FireAnim");
Fire();
}
}
}
if(AmmoLeft == 0)
{
Reload();
}
if(AmmoLeft < 0){
AmmoLeft = 0;
}
}
function Fire () {
if(CanFire == true && IsReloading == false){
var bullet1 : Rigidbody = Instantiate(Bullet,Spawn.position,Spawn.rotation);
bullet1.AddForce(transform.forward*BulletSpeed);
CanFire = false;
yield WaitForSeconds(FireRate);
CanFire = true;
AmmoLeft -= 1;
audio.Play();
}
}
function Reload () {
CanFire = false;
IsReloading = true;
BroadcastMessage("ReloadAnim");
yield WaitForSeconds(ReloadTime);
IsReloading = false;
CanFire = true;
AmmoLeft = AmmoInMag;
}
GunAnimation:
var Fire : String;
var Reload : String;
function Start () {
}
function FireAnim () {
gameObject.animation.Play(Fire);
}
function ReloadAnim () {
gameObject.animation[Reload].speed = (gameObject.animation[Reload].clip.length / Gun.ReloadTTime);
gameObject.animation.Play(Reload);
}
Aim:
var HipPose : Vector3;
var AimPose : Vector3;
private var MainCam : GameObject;
private var WeapCam : GameObject;
function Start () {
transform.localPosition = HipPose;
MainCam = GameObject.FindGameObjectWithTag("MainCamera");
WeapCam = GameObject.FindGameObjectWithTag("WeaponCamera");
}
function Update () {
if(Input.GetButton("Fire2")){
transform.localPosition = AimPose;
MainCam.camera.fieldOfView = 50;
WeapCam.camera.fieldOfView = 50;
}
if(!Input.GetButton("Fire2")){
transform.localPosition = HipPose;
MainCam.camera.fieldOfView = 60;
WeapCam.camera.fieldOfView = 60;
}
}
Answer by Vonni · Jan 18, 2013 at 06:06 PM
Just glancing over it, it looks like:
yield WaitForSeconds(FireRate);
inside your fire function could be giving you some trouble! It doesnt count down ammo before after the fire rate. But I would try putting the delay somewhere else, so that you can't shoot another bullet until the firerate is done.
Your answer
Follow this Question
Related Questions
How do i make a fps where the gun always shoots realisticly 3 Answers
Shooting & Animation Problem 1 Answer
Setting bullet instansiate direction? help? 1 Answer
Bullets will not fire forwards 1 Answer
How to make a gun shoot? 2 Answers