Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Irin · Jun 24, 2014 at 04:10 AM · explosiongrenadearea-damage

Null reference and GetComponent

Working on a grenade area damage script and am getting null reference error.

Its organized as follows:

  1. -Grenade prefab has a script called ExploGren.cs attached(this is the

    problem script).

  2. -Health.cs is attached to enemy

  3. -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);
             }
 
 
     }
 }
 
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
0
Best Answer

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.

Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Irin · Jun 26, 2014 at 06:08 PM 0
Share

Well it works, no null reference. But, the damage is not being applied, any thoughts?

Your answer

Hint: You can notify a user about this post by typing @username

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

Answers Answers and Comments

2 People are following this question.

avatar image avatar image

Related Questions

2D explosion that targets specific gameobjects 1 Answer

OverlapSphere not causing damage? - Solved 2 Answers

Raycast collider detector lags horribly? 2 Answers

How do I destroy all enemy game objects with a bomb? 2 Answers

Unity3D grenade not exploding correctly 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges