Link to video - http://www.youtube.com/watch?v=G-EhZAJUdg0
Hi, I followed this video thru but I’m experiencing a bug. When I hold down Fire1 til the clip = 0 the gun stops but when I click Fire1 again, It shoots a bullet and at the same time reloads. I think this bug is the reason for another bug which is being able to reload while aiming. Any ideas on how to fix this would be greatly appreciated.
Also a random question for ETeeski. I noticed the guitar icon on your screen in your tutorials, is that Rocksmith? That game is awesome. =]
GunScript code:
var beingHeld : boolean = false;
var outsideBox : GameObject;
var countToThrow : int = -1;
var playerTransform : Transform;
var playerMovementScript : PlayerMovementScript;
var cameraObject : GameObject;
var targetXRotation : float;
var targetYRotation : float;
var targetXRotationV : float;
var targetYRotationV : float;
var rotateSpeed : float = 0.3;
var holdHeight : float = -0.5;
var holdSide : float = 0.5;
var ratioHipHold : float = 1;
var hipToAimSpeed : float = 0.1;
var ratioHipHoldV : float;
var aimRatio : float = 0.4;
var zoomAngle : float = 30;
var fireSpeed : float = 15;
var waitTilNextFire : float = 0;
var bullet : GameObject;
var bulletSpawn : GameObject;
var shootAngleRandonizationAiming : float = 5;
var shootAngleRandomizationNotAiming : float = 15;
var recoilAmount : float = 0.5;
var recoilRecoverTime : float = 0.2;
var currentRecoilZPos : float;
var currentRecoilZPosV : float;
var bulletSound : GameObject;
var muzzleFlash : GameObject;
var gunbobAmountX : float = 0.5;
var gunbobAmountY : float = 0.5;
var currentGunbobX : float;
var currentGunbobY : float;
var gunModelObjects : GameObject[];
var reloading : boolean = false;
var reloadAnimation : Animation;
var reloadSound : AudioSource;
var reloadAnimationString : String;
var clipSize : int = 25;
var currentClip : int = 25;
var maxExtraAmmo : int = 100;
var currentExtraAmmo : int = 100;
function Awake ()
{
countToThrow = -1;
playerTransform = GameObject.FindWithTag("Player").transform;
playerMovementScript = GameObject.FindWithTag("Player").GetComponent(PlayerMovementScript);
cameraObject = GameObject.FindWithTag("MainCamera");
}
function LateUpdate ()
{
if ( currentClip > clipSize)
currentClip = clipSize;
if ( currentExtraAmmo > maxExtraAmmo)
currentExtraAmmo = maxExtraAmmo;
if ( currentClip < 0)
currentClip = 0;
if ( currentExtraAmmo < 0)
currentExtraAmmo = 0;
if (beingHeld)
{
if (!reloading Input.GetButtonDown("Reload") currentClip < clipSize currentExtraAmmo > 0)
{
reloading = true;
reloadAnimation.Play( reloadAnimationString);
reloadSound.Play();
}
if (!reloading Input.GetButtonDown("Fire1") currentClip == 0 currentExtraAmmo > 0)
{
reloading = true;
reloadAnimation.Play( reloadAnimationString);
reloadSound.Play();
}
if (reloading reloadAnimation.IsPlaying( reloadAnimationString))
{
if ( currentExtraAmmo >= clipSize - currentClip)
{
currentExtraAmmo -= clipSize - currentClip;
currentClip = clipSize;
}
if ( currentExtraAmmo < clipSize - currentClip)
{
currentClip += currentExtraAmmo;
currentExtraAmmo = 0;
}
reloading = false;
}
for(var modelObject : GameObject in gunModelObjects)
{
modelObject.layer = 8;
}
rigidbody.useGravity = false;
outsideBox.GetComponent(Collider).enabled = false;
currentGunbobX = Mathf.Sin( cameraObject.GetComponent( LookMouseScript).headbobStepCounter) * gunbobAmountX * ratioHipHold;
currentGunbobY = Mathf.Cos( cameraObject.GetComponent( LookMouseScript).headbobStepCounter * 2) * gunbobAmountY * -1 * ratioHipHold;
var holdMuzzleFlash : GameObject;
var holdSound : GameObject;
if (Input.GetButton("Fire1") currentClip > 0 !reloading)
{
if (waitTilNextFire <= 0)
{
currentClip -= 1;
if (bullet)
Instantiate(bullet, bulletSpawn.transform.position, bulletSpawn.transform.rotation);
if (bulletSound)
holdSound = Instantiate(bulletSound, bulletSpawn.transform.position, bulletSpawn.transform.rotation);
if (muzzleFlash)
holdMuzzleFlash = Instantiate(muzzleFlash, bulletSpawn.transform.position, bulletSpawn.transform.rotation);
targetXRotation += (Random.value - 0.5) * Mathf.Lerp(shootAngleRandonizationAiming, shootAngleRandomizationNotAiming, ratioHipHold);
targetYRotation += (Random.value - 0.5) * Mathf.Lerp(shootAngleRandonizationAiming, shootAngleRandomizationNotAiming, ratioHipHold);
currentRecoilZPos -= recoilAmount;
waitTilNextFire = 1;
}
}
waitTilNextFire -= Time.deltaTime * fireSpeed;
if (holdSound)
holdSound.transform.parent = transform;
if (holdMuzzleFlash)
holdMuzzleFlash.transform.parent = transform;
currentRecoilZPos = Mathf.SmoothDamp( currentRecoilZPos, 0, currentRecoilZPosV, recoilRecoverTime);
cameraObject.GetComponent(LookMouseScript).currentTargetCameraAngle = zoomAngle;
if (Input.GetButton("Fire2") !reloading){
cameraObject.GetComponent(LookMouseScript).currentAimRatio = aimRatio;
ratioHipHold = Mathf.SmoothDamp(ratioHipHold, 0, ratioHipHoldV, hipToAimSpeed);}
if (Input.GetButton("Fire2") == false || reloading){
cameraObject.GetComponent(LookMouseScript).currentAimRatio = 1;
ratioHipHold = Mathf.SmoothDamp(ratioHipHold, 1, ratioHipHoldV, hipToAimSpeed);}
transform.position = cameraObject.transform.position + (Quaternion.Euler(0, targetYRotation, 0) * Vector3(holdSide * ratioHipHold + currentGunbobX, holdHeight * ratioHipHold + currentGunbobY, 0) + Quaternion.Euler( targetXRotation, targetYRotation, 0) * Vector3(0, 0, currentRecoilZPos));
targetXRotation = Mathf.SmoothDamp( targetXRotation, cameraObject.GetComponent(LookMouseScript).xRotation, targetXRotationV, rotateSpeed);
targetYRotation = Mathf.SmoothDamp( targetYRotation, cameraObject.GetComponent(LookMouseScript).yRotation, targetYRotationV, rotateSpeed);
transform.rotation = Quaternion.Euler(targetXRotation, targetYRotation, 0);
}
if (!beingHeld)
{
for(var modelObject : GameObject in gunModelObjects)
{
modelObject.layer = 0;
}
rigidbody.useGravity = true;
outsideBox.GetComponent(Collider).enabled = true;
countToThrow -= 1;
if (countToThrow == 0)
rigidbody.AddRelativeForce(0, playerMovementScript.throwGunUpForce, playerMovementScript.throwGunForwardForce);
if (Vector3.Distance(transform.position, playerTransform.position) < playerMovementScript.distToPickUpGun Input.GetButtonDown("Use Key") playerMovementScript.waitFrameForSwitchGuns <= 0)
{
playerMovementScript.currentGun.GetComponent(GunScript).beingHeld = false;
playerMovementScript.currentGun.GetComponent(GunScript).countToThrow = 2;
playerMovementScript.currentGun = gameObject;
beingHeld = true;
targetYRotation = cameraObject.GetComponent(LookMouseScript).yRotation - 180;
playerMovementScript.waitFrameForSwitchGuns = 2;
}
}
}