Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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
1
Question by Xaqqa · Jul 01, 2018 at 11:11 AM · c#gameobjectstagsdestroy object

Is there an opposite of GameObject.FindGameObjectsWithTag() ?

Currently trying to implement a function that removes all children of a parent that haven't got a specific tag. I originally tried Destroy(Current_Held.FindGameObjectsWithTag(!"Placeholder_Item_1")); To see if I could Destroy all children under the "Current_Held" parent that aren't tagged with "Placeholder_Item_1", but of course that just came up with a syntax error.

If anybody is wondering, this piece of code is being used to display the object in the hand of the player (much like Minecraft, I guess), so when the user switches what hot-bar item is selected, the code will remove the previous item out of your hand and Instantiate the new one.

If anybody has another method that would be more efficient, I'm all ears. After all, nothing is better than more efficient code.

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

2 Replies

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

Answer by WinterboltGames · Jul 01, 2018 at 11:23 AM

I always use this method...

 public GameObject[] FindGameObjectsWithTag(string tag)
 {
     var sceneGameObjects = FindObjectsOfType<GameObject>();
 
     var gameObjectsWithTag = new List<GameObject>();
 
     for (int i = 0; i < sceneGameObjects.Length; i++)
     {
         var currentGameObject = sceneGameObjects[i];
 
         if (currentGameObject.CompareTag(tag))
         {
             gameObjectsWithTag.Add(currentGameObject);
         }
     }
 
     return gameObjectsWithTag.ToArray();
 }
 
 private void Start()
 {
     var gameObjects = FindGameObjectsWithTag("zombie");
 
     foreach (var go in gameObjects)
     {
         Destroy(go);
     }
 }

It's not very efficient, because if you call FindObjectsOfType<T>() too much your game will do hiccups and may even crash if there are too many game objects in the scene or if you call this function in Update()


--- UPDATE ---


I didn't understand your question at first (silly me!) But now I know that you are to destroy all child gameObjects that aren't tagged with a specific tag...so, use this code...

 var tag = "DontDestroyMe";
 
 var childCount = transform.childCount;
 
 for (int i = 0; i < childCount; i++)
 {
     var child = transform.GetChild(i).gameObject;
 
     if (!child.CompareTag(tag))
     {
         Destroy(child);
     }
 }



The previous code will destroy all of the children that aren't tagged with DontDestroyMe.
Hope this helps...


--- UPDATE 2 ---


 public class WeaponManager : MonoBehaviour
 {
     public GameObject[] weapons;
 
     public void SwitchToWeapon(string weaponName)
     {
         if (weapons.Length == 0)
         {
             return;
         }
 
         for (int i = 0; i < weapons.Length; i++)
         {
             if (string.Compare(weapon[i].name, weaponName) == 0)
             {
                 weapons[i].SetActive(true);
             }
             else
             {
                 weapons[i].SetActive(false);
             }
         }
     }
 }





If you are trying to make a weapon switching system, do this this's much more efficient than destroying/instantiating objects everytome the player switches items...


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 Xaqqa · Jul 01, 2018 at 11:29 AM

@KillerOfSteam7 Thanks for the quick response and I can see why you use this method.

However, if I were to do a FindGameObjectsWithTag(); for each of the other items except the one I want to be in my player's hand, it's going to be an extremely long list, and I don't think it's going to be very good for efficiency.

If there were going to be fewer inventory items in a game, I would definitely use this code though, so I'll keep it written down!

  • UPDATE --

I only went a responded before I read your update, thanks so much man. I owe you one.

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 Xaqqa · Jul 01, 2018 at 11:39 AM 0
Share

@$$anonymous$$illerOfS$$anonymous$$m7 If I'm only ever removing 1 child object, is it possible that I can just miss out the for loop altogether? This is what I'm thinking (Current_Held_Item will always have the tag that I want to keep).

     string tag = Current_Held_Item;
     
                GameObject child = Current_Held.transform.GetChild(0).gameObject;
     
                 if (!child.CompareTag(tag))
                 {
                     Destroy(child);
                 }
 

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

523 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

How do i destroy a particle when an object is destroyed 1 Answer

gameObject.tag = "player"; breaks code 1 Answer

I am using this script to drag/move gameobjects with the mouse. I need the script to ONLY recognize objects with a TAG, like "Painting", How can I fix this? 3 Answers


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