- Home /
Null reference and GetComponent
Working on a grenade area damage script and am getting null reference error.
Its organized as follows:
-Grenade prefab has a script called ExploGren.cs attached(this is the
problem script).
-Health.cs is attached to enemy
-When g is pressed, grenadeThrow.cs instantiates grenade prefab, after 5 seconds, ExploGren.cs is called. ExploGren.cs calls Health.cs and applies damage.
A null reference error is displayed when the ExploGren.cs happens. I initialized the Health.cs right, but im sure i used the wrong way to call the Damage() method. So how do i fix this?
using UnityEngine;
using System.Collections;
public class ExploGren : MonoBehaviour
{
public GameObject explosivo;//the explosive particle
private GameObject insta;// instatntiation of variables for explosion
private float timer = 0.0f;//zero time
private float timeTD = 5.0f;//time ot detonate
private int exploDamage = 50;//grenade damage
private float explosiveRadius = 5.0f;//radious of the explosive damage
Collider[] collidersInRange;
Vector3 grenadeOrigin;
Health damageByGrenadeExplosion;//declare health
// Use this for initialization
void Start ()
{
damageByGrenadeExplosion = GetComponent<Health>();
grenadeOrigin = transform.position;
collidersInRange = Physics.OverlapSphere(grenadeOrigin, explosiveRadius);
}
// Update is called once per frame
void Update ()
{
timer +=1 * Time.deltaTime;//start counting
if(timer >= timeTD)//if timer is equal to detonation, detonate
{
insta = (GameObject)Instantiate(explosivo, transform.position, transform.rotation);//create the explosion at the grenades position
foreach(Collider col in collidersInRange)
{
damageByGrenadeExplosion.Damage(exploDamage);//<--problem is here.
}
//Destroy(insta, .70f);
}
}
}
Answer by robertbu · Jun 24, 2014 at 04:16 AM
Your code is trying to get the Health script attached to the same game object as ExploGren. But according to your question, the Health script is attached to all the enemies. To fix:
Delete line 23
Insert between line 39 and 40:
damageByGrenadeExplosion = col.GetComponent(); if (damageByGrenadeExplosion != null)
A couple of other notes.
damageByGrenadeExplosion can be declared inside the Update() function rather than at the class level.
I don't know your game mechanic, but line 25 (where you call OverlapSphere) should probably be moved to between line 35 and 36 so that it has fresh data at the time of the explosion.
Well it works, no null reference. But, the damage is not being applied, any thoughts?