Hi, I'm having some trouble with my burst fire script. It keeps giving me the errors
(152,18): error CS1525: Unexpected symbol `(', expecting `,', `;', or `='
(163,1): error CS1525: Unexpected symbol `}'
(152,6): error CS1547: Keyword `void' cannot be used in this context
Here is the code
using UnityEngine;
using System.Collections;
public class GunMagnum : MonoBehaviour
{
private const int V = 3;
//Decal
public GameObject decalHit;
public float projectileDestroyTimer = 5f;
//Ámmo
public int maxAmmoTotal = 30; // Max ammo to carry Example: 30
public int maxAmmoInClipTotal = 5; // Max ammo total to be able to reload Example: 5
public int curAmmo = 30; // Current reloadable ammo Example: 30
public int ammoInClip = 8; // Current ammo in clip Example: 5
private bool isReloading = false;
//Animation
public string fireAnimation; //Shoot animation
public string clipEmptyAnim; //Clip empty animation
public string reloadAnimation; //Reload animation
public float reloadTime = 1f; // How long it takes to reload
public Animator reloadAnimations;
public Animator ClipEmptyAnimations;
//GameObjects
public GameObject weapon; //Needed for aiming
public ParticleSystem muzzleflash;
public Animator FireAnimation;
public AudioSource GunSounds;
//Raycast
private RaycastHit rayHit;
public float shootDistance = 200f;
//Recoil
private float defaultRecoil = 50f;
public float recoil = 50f;
public float recoilAiming = 10f;
//Aim
public Vector3 aimPos = Vector3.zero;
private Vector3 defaultPos = Vector3.zero;
public float smoothTime; //How long it takes to get to the aiming position
private Vector3 dampVelocity;
private bool aiming = false;
//Audio
private AudioSource audioSource; //Audio source
public AudioClip fireSound; //Sound when shooting
public AudioSource clipEmptySound; //Sound when clip is empty
public AudioSource reloadSound; //Sound when reloading
//Weapon
public float hitDamage = 12;
public float LastTimeShot;
public float TimeBetweenShots = 1;
public float fireRate = 20f;
private const float TIME_BETWEEN_SHOTS = .5f;
private const int SHOTS_PER_BURST = 3;
public int shotDamage = 10; // Change this variable to deal a different ammount of damage
// Routine responsible for firing a burst
private Coroutine shootRoutine = null;
private float nextTimeToFire = 0f;
//Only for testing
int removedAmmoRecently; //Only for testing
private IEnumerator BurstFire()
{
int bulletsShot = 0;
while (bulletsShot < SHOTS_PER_BURST)
{
Shoot();
bulletsShot++;
yield return new WaitForSeconds(TIME_BETWEEN_SHOTS);
}
shootRoutine = null;
}
void Start()
{
defaultPos = weapon.transform.localPosition;
defaultRecoil = recoil;
audioSource = GetComponent();
}
void Update()
{
AimDownSight();
if (Input.GetButton("Fire1") && Time.time >=nextTimeToFire)
{
nextTimeToFire = Time.time + 1f / fireRate;
Shoot();
}
if(Input.GetButtonDown("Fire2") && !isReloading)
{
aiming = !aiming;
}
if (Input.GetKeyDown(KeyCode.R) && !isReloading)
{
StartCoroutine("Reload");
}
}
private void Shoot()
{
if(ammoInClip != 0 && !isReloading)
{
PlaySound(fireSound);
GunSounds.Play();
muzzleflash.Play();
PlayAnimation(fireAnimation);
GetComponent().Play("FireAnimation");
ammoInClip--;
Ray ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width/2f + Random.Range(-recoil, recoil), Screen.height/2f + Random.Range(-recoil, recoil), 0f));
if (Physics.Raycast(ray, out rayHit, shootDistance))
{
GameObject decalClone = (GameObject)Instantiate(decalHit, rayHit.point, Quaternion.LookRotation(rayHit.normal, Vector3.forward));
Destroy(decalClone, projectileDestroyTimer);
}
void DoDamage(RaycastHit hit)
{
if(hit.transform.tag == "Enemy")
{
if(hit.transform.GetComponent())
{
hit.transform.GetComponent().ApplyDamage(shotDamage); // Apply damage equal to the damage variable to the enemy
}
Debug.Log(hit.transform.name + " has been hit");
}
}
}
IEnumerator Reload()
{
//If ammoInClip example 5 is equal or greater than 0 and ammoInClip(5) is lower than maxAmmoInClipTotal(The max amount of ammo that can be in a clip) and curAmmo(how much ammo you have like 5/30) is greater than 0
if (ammoInClip >= 0 && ammoInClip < maxAmmoInClipTotal && curAmmo > 0)
{
isReloading = true;
reloadSound.Play();
GetComponent().Play("reloadAnimations");
yield return new WaitForSeconds(reloadTime);
removedAmmoRecently = 0; //You can remove this line, it's only for testing.
for (int i = 0; i < maxAmmoInClipTotal; i++)
{
if (ammoInClip == maxAmmoInClipTotal || curAmmo <= 0)
{
break;
}
else
{
ammoInClip++;
curAmmo--;
removedAmmoRecently++; //You can remove this line, it's only for testing. | To check how much ammo has been removed
}
}
isReloading = false;
Debug.Log("Removed " + removedAmmoRecently + " " + "ammo from pocket ammo. Ammo: " + ammoInClip + "/" + curAmmo); //You can remove this line, it's only for testing. | Prints out how much ammo that has been removed, ammo you have in clip, and how much ammo that is left
}
else
{
yield break;
}
}
void PlayAnimation(string anim)
{
if (anim != "")
{
weapon.GetComponent().Play(anim);
}
}
void PlaySound(AudioClip clip)
{
if (clip != null)
{
audioSource.PlayOneShot(clip);
}
}
void AimDownSight()
{
if(aiming && weapon.transform.localPosition.normalized != aimPos.normalized)
{
weapon.transform.localPosition = Vector3.SmoothDamp (weapon.transform.localPosition, aimPos, ref dampVelocity, smoothTime);
Debug.Log ("Aiming");
recoil = recoilAiming;
}
if(!aiming && weapon.transform.localPosition.normalized != defaultPos.normalized)
{
weapon.transform.localPosition = Vector3.SmoothDamp (weapon.transform.localPosition, defaultPos, ref dampVelocity, smoothTime);
Debug.Log ("UnAiming");
recoil = defaultRecoil;
}
}
void OnGUI()
{
GUILayout.Label("Ammo: " + ammoInClip + "/" + curAmmo);
}
}
↧