# Activate object that have button component?

I'm trying to activate the array object that have button component.

 public GameObject[] weapon_carry_pistol = new GameObject[3];
public int p1_carry,activeObjects;

// Update is called once per frame
void Update()
{

p1_carry =  weapon_carry_pistol[0].GetComponentsInChildren<Button>().Length; // 6 objects

for (int i = 0; i < activeObjects; i++)
{
weapon_carry_pistol[0].GetComponentsInChildren<Button>()[i].enabled = true;
}

}


This script do activate the button component but not the whole game object. If I change "Button" to "GameObject" I get error //.GetComponent requires that the requested component 'GameObject' derives from MonoBehaviour or Component or is an interface.//

## 1 Answer

There is a conceptual difference between a GameObject and a Component. One GameObject has many Components and every Component belongs to a GameObject. If you have that thing on the UI which you consider a button, then what you actually have is a GameObject which has a Button component (among other components).

Some components can be enabled and disabled with a .enabled property or in some other way (not all components, though. For example, you can disable a Renderer but you can't disable a Transform). A GameObject on the other hand, is activated or deactivated with the SetActive(bool) method.

So if you want to get all the game objects in the children of weapon_carry_pistol[0] which have a button and then activate those game objects, then you:

1. find all the button-components with GetComponentsInChildren. In this case you specifically want to include any buttons in inactive game objects, so you need to use GetComponentsInChildren<Button>(true).
2. iterate those in a foreach loop
3. determine the GameObject of the current button by checking the .gameObject property every component has.
4. activate that GameObject with .SetActive(true)

Like this:

foreach (Button button in weapon_carry_pistol[0].GetComponentsInChildren<Button>(true) ) {
button.gameObject.SetActive(true);
}

• Thank you for your reply. Still something is missing. Here is the new [script now] (hastebin.com/yukepitaqo.cs). The issue now that when I increase "activeObjects" one value all objects with button active or not show up !! – user43474 Mar 9 '19 at 15:53
• @user43474 I'm sorry, but I don't understand what you mean. Can you add more information about what exactly you want to do, how your object hierarchy looks? Why is weapon_carry_pistol an array anyway and what does activeObjectsmean? It's hard to tell what exactly you need when you don't show us the full picture. – Philipp Mar 10 '19 at 2:56
• (i.postimg.cc/52KCnDqm/00.png) As you see on image, there is a parent and 6 child objects. In my script, "weapon_carry_pistol" is the parent object. That's why i'm using "GetComponentsInChildren" to get child objects inside my array and activate them by numbers. If activeObjects = 1. the first element in my array will be active. and so on. I tried "GameObject" instead "button" but I got error !! – user43474 Mar 10 '19 at 18:18