how to make rocket launcher

I was making a rocket launcher and i need it to explode. i have the code for the rocket launcher.

using System.Collections;
using UnityEngine;

[RequireComponent(typeof(AudioSource))]

public class SC_Weapon : MonoBehaviour
{
public bool singleFire = false;
public float fireRate = 0.1f;
public GameObject bulletPrefab;
public Transform firePoint;
public int bulletsPerMagazine = 30;
public float timeToReload = 1.5f;
public float weaponDamage = 15; //How much damage should this weapon deal
public AudioClip fireAudio;
public AudioClip reloadAudio;

[HideInInspector]
public SC_WeaponManager manager;

float nextFireTime = 0;
bool canFire = true;
int bulletsPerMagazineDefault = 0;
AudioSource audioSource;

// Start is called before the first frame update
void Start()
{
    bulletsPerMagazineDefault = bulletsPerMagazine;
    audioSource = GetComponent<AudioSource>();
    audioSource.playOnAwake = false;
    //Make sound 3D
    audioSource.spatialBlend = 1f;
}

// Update is called once per frame
void Update()
{
    if (Input.GetMouseButtonDown(0) && singleFire)
    {
        Fire();
    }
    if (Input.GetMouseButton(0) && !singleFire)
    {
        Fire();
    }
    if (Input.GetKeyDown(KeyCode.R) && canFire)
    {
        StartCoroutine(Reload());
    }
}

void Fire()
{
    if (canFire)
    {
        if (Time.time > nextFireTime)
        {
            nextFireTime = Time.time + fireRate;

            if (bulletsPerMagazine > 0)
            {
                //Point fire point at the current center of Camera
                Vector3 firePointPointerPosition = manager.playerCamera.transform.position + manager.playerCamera.transform.forward * 100;
                RaycastHit hit;
                if (Physics.Raycast(manager.playerCamera.transform.position, manager.playerCamera.transform.forward, out hit, 100))
                {
                    firePointPointerPosition = hit.point;
                }
                firePoint.LookAt(firePointPointerPosition);
                //Fire
                GameObject bulletObject = Instantiate(bulletPrefab, firePoint.position, firePoint.rotation);
                SC_Bullet bullet = bulletObject.GetComponent<SC_Bullet>();
                //Set bullet damage according to weapon damage value
                bullet.SetDamage(weaponDamage);

                bulletsPerMagazine--;
                audioSource.clip = fireAudio;
                audioSource.Play();
            }
            else
            {
                StartCoroutine(Reload());
            }
        }
    }
}

IEnumerator Reload()
{
    canFire = false;

    audioSource.clip = reloadAudio;
    audioSource.Play();

    yield return new WaitForSeconds(timeToReload);

    bulletsPerMagazine = bulletsPerMagazineDefault;

    canFire = true;
}

//Called from SC_WeaponManager
public void ActivateWeapon(bool activate)
{
    StopAllCoroutines();
    canFire = true;
    gameObject.SetActive(activate);
}

}

(code for bullet)

using System.Collections;
using UnityEngine;

public class SC_Bullet : MonoBehaviour
{
public float bulletSpeed = 345;
public float hitForce = 50f;
public float destroyAfter = 3.5f;

float currentTime = 0;
Vector3 newPos;
Vector3 oldPos;
bool hasHit = false;

float damagePoints;

// Start is called before the first frame update
IEnumerator Start()
{
    newPos = transform.position;
    oldPos = newPos;

    while (currentTime < destroyAfter && !hasHit)
    {
        Vector3 velocity = transform.forward * bulletSpeed;
        newPos += velocity * Time.deltaTime;
        Vector3 direction = newPos - oldPos;
        float distance = direction.magnitude;
        RaycastHit hit;

        // Check if we hit anything on the way
        if (Physics.Raycast(oldPos, direction, out hit, distance))
        {
            if (hit.rigidbody != null)
            {
                hit.rigidbody.AddForce(direction * hitForce);

                IEntity npc = hit.transform.GetComponent<IEntity>();
                if (npc != null)
                {
                    //Apply damage to NPC
                    npc.ApplyDamage(damagePoints);
                }
            }

            newPos = hit.point; //Adjust new position
            StartCoroutine(DestroyBullet());
        }

        currentTime += Time.deltaTime;
        yield return new WaitForFixedUpdate();

        transform.position = newPos;
        oldPos = newPos;
    }

    if (!hasHit)
    {
        StartCoroutine(DestroyBullet());
    }
}

IEnumerator DestroyBullet()
{
    hasHit = true;
    yield return new WaitForSeconds(0.5f);
    Destroy(gameObject);
}

//Set how much damage this bullet will deal
public void SetDamage(float points)
{
    damagePoints = points;
}

}

I wanted the rocket prefab to have the script to explode.
thanks in advance! :slight_smile:

Here’s a simple explosion that may help. Modify your destroy bullet code to match something like this:

IEnumerator DestroyBullet()
 {
     hasHit = true;
     yield return new WaitForSeconds(0.5f);
     ParticleSystem exp = GetComponent<ParticleSystem>();
     exp.Play();
     Destroy(gameObject, exp.main.duration);
 }

Also, add this directly before your bullet class in your bullet code. It will ensure that you have the needed particle system attached to the object.

[RequireComponent(typeof(ParticleSystem))]

Here are a few useful references.

https://docs.unity3d.com/Manual/PartSysExplosion.html