Question by
MichaelABC · Feb 16 at 10:39 PM ·
tagchildrenloops
How to change (grand)children tag?
In this (part of) script I "eject" the "selected" gameobject (called "Int_Molecule") from the player object.
void Eject()
{
if (Player.objectGrabed.Count >= 1 && Input.GetKeyDown(KeyCode.Mouse0))
{
//var obj = Player.objectGrabed.Last();
Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
var closestObject = collidingObjects.OrderBy(_ => (_.transform.position - (Vector3)mousePos).sqrMagnitude).First();
closestObject.GetComponentInChildren<Transform>().tag = "Mid_Molecule";
closestObject.tag = "Mid_Molecule";
closestObject.GetComponent<Rigidbody2D>().bodyType = RigidbodyType2D.Dynamic;
closestObject.GetComponent<Rigidbody2D>().AddForce(closestObject.transform.parent.up * Player.throwSpeed);
closestObject.transform.SetParent(null);
StartCoroutine(ChangeTag());
//Destroy(obj, 3f);
Player.objectGrabed.RemoveAt(Player.objectGrabed.Count - 1);
}
}
IEnumerator ChangeTag()
{
Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
var closestObject = collidingObjects.OrderBy(_ => (_.transform.position - (Vector3)mousePos).sqrMagnitude).First();
yield return new WaitForSeconds(3f);
closestObject.GetComponentInChildren<AttachmentController>().tag = "Ext_Molecule";
closestObject.tag = "Ext_Molecule";
}
To complete the process (and be able to pick them up then) I need to turn the tag back into "Ext_Molecule". When I select the object I want to eject with my mouse (purple outline) if that object has children and even grandchildren I want to change their tags too.

I have read a few discussions on this topic and I know that GetComponentInChildren does a depth first research so it could reach grandchildren, but I am not sure what < > argument to use. Also some suggest to use a foreach and/or a for [i] loop, but I am not sure how to write it in this case.
children-viewer.png
(13.1 kB)
children.png
(13.0 kB)
Comment
Your answer