- Home /
Enable Disable Components attached to tagged Game Objects
Hi
I'm trying to write a script which will enable / disable light components attached to all game objects which have a specific tag. I can created the list of game objects ok with "findgameobjectswithtag" but how do I then access each game object and switch off the attached light? Something like the code below ...
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class UILightSwitch : MonoBehaviour {
public GameObject[] myGameObjectArray;
void Start()
{
myGameObjectArray = GameObject.FindGameObjectsWithTag("LightShort");
foreach (GameObject x in myGameObjectArray)
x.myLight = GetComponent<Light>();
x.myLight.SetActive(!x.myLight.activeSelf);
}
}
Answer by EricArmitage · May 02, 2020 at 09:25 AM
Ok I've fixed it. You tag all the GameObjects that hold the lights. Then add a new game object to hold this code changing the tag name as appropriate. Reference the new GameObject, the script and the function in the UI button. On clicking the button it will build an array of all the tagged game objects and enable/disable any light components attached to the game objects in the array.
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class UILightSwitch : MonoBehaviour
{
public void TurnlightsOnOff()
{
GameObject[] myLights = GameObject.FindGameObjectsWithTag("ShortLight");
for (int i = 0; i < myLights.Length; ++i)
{
Debug.Log(i.ToString() + ": " + myLights[i].name);
myLights[i].GetComponents<Light>()[0].enabled = !myLights[i].GetComponents<Light>()[0].enabled;
}
}
Your answer
Follow this Question
Related Questions
How to check a collided gameobject for valid tags? 2 Answers
Access the same component 1 Answer
Using similar to GameObject.FindObjectsWithTag but for tag.contains. 0 Answers
Activating only one of many prefabs with the same tag 1 Answer
Need help with setting all items of a specific tag to "inactive" when i die. 0 Answers