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 xinoduck · Sep 27, 2014 at 01:28 PM · c#gameobjects

difference between GameObject.Find() and FindGameObjectWithTag

Hello. I want to ask a question about the GameObject.FindGameObjectWithTag() and GameObject.Find("name_of_GameObject_in_Hierarchy"), that i came across in a Unity tutorial here is the link to the tutorial Beginner Stealth Tutorial

With GameObject.FindGameObjectWithTag() i was constantly getting NullReferenceExceptions while with GameObject.Find(), ( i.e replacing GameObject.FindGameObjectWithTag(Tags.alarm) and GameObject.FindGameObjectWithTag(Tags.mainLight) GameObject.Find("lightunderscorealarmunderscoredirectional") and GameObject.Find("lightunderscoremainunderscoredirectional") in Awake function ) , the scene was running like the tutorial. (the tutorial is part 06 of the Beginner Stealth tutorial, in Unity's website, and i used the word underscore instead of the underscore symbol because it could not be seen in the preview for some reason)

Why was that happening?

Thanks in advance.

here are the two scripts

1.LastPlayerSighting script

     using UnityEngine;
     using System.Collections;
     
     public class LastPlayerSighting : MonoBehaviour
     {
         public Vector3 position = new Vector3(1000f, 1000f, 1000f);         // The last global sighting of the player.
         public Vector3 resetPosition = new Vector3(1000f, 1000f, 1000f);    // The default position if the player is not in sight.
         public float lightHighIntensity = 0.25f;                            // The directional light's intensity when the alarms are off.
         public float lightLowIntensity = 0f;                                // The directional light's intensity when the alarms are on.
         public float fadeSpeed = 7f;                                        // How fast the light fades between low and high intensity.
         public float musicFadeSpeed = 1f;                                   // The speed at which the 
         
         
         private AlarmLight alarm;                                           // Reference to the AlarmLight script.
         private Light mainLight;                                            // Reference to the main light.
         private AudioSource panicAudio;                                     // Reference to the AudioSource of the panic msuic.
         private AudioSource[] sirens;                                       // Reference to the AudioSources of the megaphones.
         
         
         void Awake ()
         {
             // Setup the reference to the alarm light.
             alarm = GameObject.Find("light_alarm_directional").GetComponent<AlarmLight>();
             
             // Setup the reference to the main directional light in the scene.
             mainLight = GameObject.Find(Tags.mainLight).light;
             
             // Setup the reference to the additonal audio source.
             panicAudio = transform.Find("secondaryMusic").audio;
             
             // Find an array of the siren gameobjects.
             GameObject[] sirenGameObjects = GameObject.FindGameObjectsWithTag(Tags.siren);
             
             // Set the sirens array to have the same number of elements as there are gameobjects.
             sirens = new AudioSource[sirenGameObjects.Length];
             
             // For all the sirens allocate the audio source of the gameobjects.
             for(int i = 0; i < sirens.Length; i++)
             {
                 sirens[i] = sirenGameObjects[i].audio;
             }
         }
         
         
         void Update ()
         {
             // Switch the alarms and fade the music.
             SwitchAlarms();
             MusicFading();
         }
         
         
         void SwitchAlarms ()
         {
             // Set the alarm light to be on or off.
             alarm.alarmOn = position != resetPosition;
             
             // Create a new intensity.
             float newIntensity;
             
             // If the position is not the reset position...
             if(position != resetPosition)
                 // ... then set the new intensity to low.
                 newIntensity = lightLowIntensity;
             else
                 // Otherwise set the new intensity to high.
                 newIntensity = lightHighIntensity;
             
             // Fade the directional light's intensity in or out.
             mainLight.intensity = Mathf.Lerp(mainLight.intensity, newIntensity, fadeSpeed * Time.deltaTime);
             
             // For all of the sirens...
             for(int i = 0; i < sirens.Length; i++)
             {
                 // ... if alarm is triggered and the audio isn't playing, then play the audio.
                 if(position != resetPosition && !sirens[i].isPlaying)
                     sirens[i].Play();
                 // Otherwise if the alarm isn't triggered, stop the audio.
                 else if(position == resetPosition)
                     sirens[i].Stop();
             }
         }
         
         
         void MusicFading ()
         {
             // If the alarm is not being triggered...
             if(position != resetPosition)
             {
                 // ... fade out the normal music...
                 audio.volume = Mathf.Lerp(audio.volume, 0f, musicFadeSpeed * Time.deltaTime);
                 
                 // ... and fade in the panic music.
                 panicAudio.volume = Mathf.Lerp(panicAudio.volume, 0.8f, musicFadeSpeed * Time.deltaTime);
             }
             else
             {
                 // Otherwise fade in the normal music and fade out the panic music.
                 audio.volume = Mathf.Lerp(audio.volume, 0.8f, musicFadeSpeed * Time.deltaTime);
                 panicAudio.volume = Mathf.Lerp(panicAudio.volume, 0f, musicFadeSpeed * Time.deltaTime);
             }
         }
     }


2.Tags script

 using UnityEngine;
 using System.Collections;
 
 public class Tags : MonoBehaviour
 {
     // A list of tag strings.
     public const string player = "Player";
     public const string alarm = "AlarmLight";
     public const string siren = "Siren";
     public const string gameController = "GameController";
     public const string mainLight = "MainLight";
     public const string fader = "Fader";
     public const string enemy = "Enemy";
 }




Comment
Add comment · Show 2
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 $$anonymous$$ · Sep 27, 2014 at 01:38 PM 0
Share

GameObject.Find(string) look for gameobject which has same name NOT TAG just name in Hierarchy whereas GameObject.FindGameObjectWithTag(string) look for first gameobject with same tag as you put as method argument

avatar image xinoduck · Sep 27, 2014 at 07:25 PM 0
Share

Thanks Zytr0n, i just noticed your reply, and what i wanted to know is(the same thing i asked 767_2) why since i was using TAG to refer to a GameObject with FindGameObjectWithTag(), it would still give me a NullReferenceException. For example if i would say GameObject.FindGameObjectWithTag(Tags.alarm),and i had previously given the tag "AlarmLight" to a Gameobject through the Inspector, it would give a NullReferenceException in line 23, and i figured out , it had something to do with the Tags.alarm variable, inside the FindGameObjectWithTag() expression. Any ideas why does Tags.alarm gives me a NullReferenceException?

(Tags is the second script i posted, which contains all the tags that were being used)

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by 767_2 · Sep 27, 2014 at 01:38 PM

GameObject.Find() searches by gameobject`s name and FindGameObjectWithTag searches by the tag assigned to it (in inspector there is a place you can assign tags) if you dont assign it the tag will be Untagged but you cant have no name so everyobject got a name

***(because forum doesn't let me add another answer i add it here )

you can use static and it will work so whenever you wanna call a tag call it like this Tags.alarm or Tags.whatever

 public static class Tags 
 {
     // A list of tag strings.
     public static string player = "Player";
     public static string alarm = "AlarmLight";
     public static string siren = "Siren";
     public static string gameController = "GameController";
     public static string mainLight = "MainLight";
     public static string fader = "Fader";
     public static string enemy = "Enemy";
 }

if you dont want static class you can make an instance of your tag class and assign it via inspector

Comment
Add comment · Show 3 · 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 xinoduck · Sep 27, 2014 at 05:09 PM 0
Share

Thanks for your answer. Although i was using the tag to refer to that GameObject with FindGameObjectWithTag(), it would still give me a NullReferenceException. For example if i would say GameObject.FindGameObjectWithTag(Tags.alarm),and i had previously given the tag "AlarmLight" to a Gameobject through the Inspector, it would give a NullReferenceException in line 23, and i figured out , it had something to do with the Tags.alarm variable, inside the FindGameObjectWithTag() expression. Any ideas why this was happening?

(Tags is the second script i posted, which contains all the tags that were being used)

avatar image 767_2 · Sep 27, 2014 at 05:27 PM 0
Share

did you add tags script to the script that contains findgameObject

avatar image 767_2 · Sep 27, 2014 at 07:57 PM 0
Share

i will add a code to my answer check that out

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

4 People are following this question.

avatar image avatar image avatar image avatar image

Related Questions

[SOLVED] Problem with "foreach". 1 Answer

ArgumentOutOfRangeException: Argument is out of range. Parameter name: index System. 0 Answers

Cutscene script help ? 0 Answers

Multiple Cars not working 1 Answer

whats wrong with this script. it wont work 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