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 sjurick · Feb 21, 2014 at 03:19 PM · functionremote

How to call function from another script on an instantiated Prefab?

I have a simple game where an enemy spawns, player clicks on enemy with mouse and it explodes and destroys itself, then a new enemy appears and repeats this process over and over again.

I have two scripts:

(MainScript.cs) attached to null GameObject, handles spawning and detecting the ray hit on the enemy (ExplodeScript.cs) attached to the prefab, handles the explosion and destruction of the prefab.

I am trying to use the GetComponent command to access the ExplodeScript's Explosion() method, but am getting "Null ReferenceException: Object reference not set to an instance of an object" when I click on the first enemy that spawns.

Any help would be appreciated!

Here's my code:

(MainScript)

 using UnityEngine;
 using System.Collections;
 
 public class MainScript : MonoBehaviour {
 
     Ray ray;
     RaycastHit hit;
 
     public GameObject prefab;
     public int numberOfObjects;
     public float radius;
 
     void Awake () {    
     }
 
     void Start () {
 
         // Initialize ray
         ray = Camera.main.ScreenPointToRay(Input.mousePosition);
 
            Instantiate (prefab, new Vector3(1,1,1), Quaternion.identity);
     }
 
 
     void Update () {
         ShootObject();
     }
 
 
     void ShootObject() {
 
         // Use Input.GetKeyDown() for single clicks
         if(Input.GetKeyDown(KeyCode.Mouse0))
         {
             // Reset ray with new mouse position
             ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
 
             // Check to see if something got hit
             if(Physics.Raycast(ray, out hit)) {
             if(hit.transform.tag == "enemy") {
             GameObject.Find("PrefabEnemy").GetComponent<ExplodeScript>().Explode();
             Debug.Log("Enemy object HIT!");
                 }
                }
         }
       }
 }





(ExplodeScript)

 using UnityEngine;
 using System.Collections;
 
 public class ExplodeScript : MonoBehaviour {
 
     public GameObject explosion;
     public AudioClip explosionSound;
 
     // Use this for initialization
     void Start () {        
     }
     
     // Update is called once per frame
     void Update () {
     }
 
     public void Explode () {
         Instantiate(explosion,transform.position,Quaternion.identity);
         AudioSource.PlayClipAtPoint(explosionSound, transform.position);
         Destroy(this.gameObject);
     }
 }
Comment
Add comment · Show 1
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 Unity_gamer · Feb 21, 2014 at 03:28 PM 0
Share

Check the Object name you are finding

  • Here you are finding "PrefabEnemy"

  • Since you are instantiating the prefab runtime the name of the Game object will be "PrefabEnemy(Clone)".

  • You need to find the Object with this name "PrefabEnemy(Clone)" ins$$anonymous$$d of "PrefabEnemy".

Check it in the editor run time and post the result.

2 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by Linus · Feb 21, 2014 at 03:27 PM

Although this is UnityScript there is not much difference. i copy pasted something i had open in editor. You should get what you need from it.

 var newPrefab : GameObject = Instantiate (prefab, Vector3(xIndex*0.32, yIndex*0.32, 0), Quaternion.identity);
 
 var explosionComponentOnNewPrefab : ExplodeScript = newPrefab.transform.GetComponent(ExplodeScript);
 
 explosionComponentOnNewPrefab.Explode();
Comment
Add comment · 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
0

Answer by Dblfstr · Feb 21, 2014 at 03:31 PM

make explode a static function and call it like this.

Psuedo Code:

Explode script.

 public static void Explode(){
 //All your code
 }

main script

 if (keydown)
 if (hit)
 ExplodeScript.Explode();
Comment
Add comment · 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

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

21 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

The name 'Joystick' does not denote a valid type ('not found') 2 Answers

Can someone help me fix my Javascript for Flickering Light? 6 Answers

Material doesn't have a color property '_Color' 4 Answers

Problem with UI Button calling function [4.6 UI] 1 Answer

Activating function on another object script - annoying... 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