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().tag = "Mid_Molecule";
closestObject.tag = "Mid_Molecule";
closestObject.GetComponent().bodyType = RigidbodyType2D.Dynamic;
closestObject.GetComponent().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().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.
![alt text][1]
![alt text][2] [1]: /storage/temp/192717-children-viewer.png [2]: /storage/temp/192718-children.png
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.
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
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.
![alt text][1]
![alt text][2] [1]: /storage/temp/192717-children-viewer.png [2]: /storage/temp/192718-children.png
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.