x


Modified Machine Gun Script Error

OK I have been looking for weeks now for a way to have my weapons emit different particles when they hit differenty game objects. and on the Unity forum I found this:

var SparkEmitter: GameObject;
var BloodEmitter: GameObject;
var DirtEmitter: GameObject;
var range = 100.0;
var fireRate = 0.05;
var force = 10.0;
var damage = 5.0;
var bulletsPerClip = 40;
var clips = 20;
var reloadTime = 0.5;
private var hitParticles : ParticleEmitter;
var muzzleFlash : Renderer;

private var bulletsLeft : int = 0;
private var nextFireTime = 0.0;
private var m_LastFrameShot = -1;


function Start()
{
    var direction = transform.TransformDirection(Vector3.forward);
    var hit : RaycastHit;
    if (Physics.Raycast (transform.position, direction, hit, range)){
        print ("I'm looking at " + hit.transform.name);
    } else {
        print ("I'm looking at nothing!");
    }
        DirtParticles = DirtEmitter.GetComponent(ParticleEmitter);
       BloodParticles = BloodEmitter.GetComponent(ParticleEmitter);
        SparkParticles = SparkEmitter.GetComponent(ParticleEmitter);

    // We don't want to emit particles all the time, only when we hit something.
    if (DirtParticles)
        DirtParticles.emit = false;



    // We don't want to emit particles all the time, only when we hit something.
    if (BloodParticles)
        BloodParticles.emit = false;



    // We don't want to emit particles all the time, only when we hit something.
    if (SparkParticles)
        SparkParticles.emit = false;
    bulletsLeft = bulletsPerClip;
}

function LateUpdate()
{
    if (muzzleFlash)
    {
        // We shot this frame, enable the muzzle flash
        if (m_LastFrameShot == Time.frameCount)
        {
            muzzleFlash.transform.localRotation = Quaternion.AxisAngle(Vector3.forward, Random.value);
            muzzleFlash.enabled = true;

            if (audio)
            {
                if (!audio.isPlaying)
                    audio.Play();
                audio.loop = true;
            }
        }
        // We didn't, disable the muzzle flash
        else
        {
            muzzleFlash.enabled = false;
            enabled = false;

            // Play sound
            if (audio)
            {
                audio.loop = false;
            }
        }
    }
}

function Fire ()
{
    if (bulletsLeft == 0)
        return;

    // If there is more than one bullet between the last and this frame
    // Reset the nextFireTime
    if (Time.time - fireRate > nextFireTime)
        nextFireTime = Time.time - Time.deltaTime;

    // Keep firing until we used up the fire time
    while( nextFireTime < Time.time && bulletsLeft != 0)
    {
        FireOneShot();
        nextFireTime += fireRate;
    }
}

function FireOneShot (){


        DirtParticles = DirtEmitter.GetComponent(ParticleEmitter);
       BloodParticles = BloodEmitter.GetComponent(ParticleEmitter);
        SparkParticles = SparkEmitter.GetComponent(ParticleEmitter);
    var direction = transform.TransformDirection(Vector3.forward);
    var hit : RaycastHit;

    // Did we hit anything?
    if (Physics.Raycast (transform.position, direction, hit, range))
    {
        // Apply a force to the rigidbody we hit
        if (hit.rigidbody)
            hit.rigidbody.AddForceAtPosition(force * direction, hit.point);

        // Place the particle system for spawing out of place where we hit the surface!
        // And spawn a couple of particles
        if (DirtParticles&&hit.collider.transform.CompareTag("Ground"))
        {
            DirtParticles.transform.position = hit.point;
            DirtParticles.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
            DirtParticles.Emit();
        }
        if (BloodParticles&&hit.collider.transform.CompareTag("alienZombie"))
        {
            BloodParticles.transform.position = hit.point;
            BloodParticles.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
            BloodParticles.Emit();
        }
       if (SparkParticles&&hit.collider.transform.CompareTag("Metal"))
        {
            SparkParticles.transform.position = hit.point;
            SparkParticles.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
            SparkParticles.Emit();
        }
        // Send a damage message to the hit object          
        hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
    }

    bulletsLeft--;

    // Register that we shot this frame,
    // so that the LateUpdate function enabled the muzzleflash renderer for one frame
    m_LastFrameShot = Time.frameCount;
    enabled = true;

    // Reload gun in reload Time        
    if (bulletsLeft == 0)
        Reload();           
}

function Reload () {

    // Wait for reload time first - then add more bullets!
    yield WaitForSeconds(reloadTime);

    // We have a clip left reload
    if (clips > 0)
    {
        clips--;
        bulletsLeft = bulletsPerClip;
    }
}

function GetBulletsLeft () {
    return bulletsLeft;
}

BUT I get this error message: MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object. MachineGun.FireOneShot () (at Assets/WeaponScripts/MachineGun.js:104) MachineGun.Fire () (at Assets/WeaponScripts/MachineGun.js:95) UnityEngine.Component:BroadcastMessage(String) PlayerWeapons:Update() (at Assets/WeaponScripts/PlayerWeapons.js:10)

WHY? To the bet of my knowledge I have set it up exaxtly the way he has it in his sample project with the small exception that I'm naturally using my own particle emiters??? WTF WTF WTF Man this crap frustrates me!!

more ▼

asked Apr 25 '11 at 02:11 PM

Michael 12 gravatar image

Michael 12
132 85 98 106

(comments are locked)
10|3000 characters needed characters left

0 answers: sort voted first
Be the first one to answer this question
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x49
x30
x19
x14

asked: Apr 25 '11 at 02:11 PM

Seen: 841 times

Last Updated: Apr 25 '11 at 02:11 PM