- Home /
Detach a child from a parent
I have a game where my player is meant to pick up an object and have it hover next to them to simulate that they are holding it. Setting the object to be a child to the first person player worked out well, but the issue I'm having now is to have the object no longer be a child to the parent.
By this I mean that I press the "k" button and the object will no longer follow the player around as it's no longer the child. I have tried transform.parent = null but to no effect.
{
if (Input.GetMouseButton(0))
{
transform.parent = player.transform;
Debug.Log("yeet");
transform.localPosition = new Vector3(1, 0.8f, 1.5f);
print(transform.localPosition.y);
if (Input.GetKeyDown("k"))
transform.parent = null;
}
}
}
Is the code simply wrong or anything else? Thank you in advance!
Answer by Bunny83 · Mar 22, 2018 at 12:44 AM
You have your key down check inside your mouse button check. You probably want this outside the mouse button check. Also you may want to use GetMouseButtonDown instead since otherwise you would execute the code inside the if body every frame while holding the mouse button down.
void Update()
{
if (Input.GetMouseButtonDown(0))
{
transform.parent = player.transform;
transform.localPosition = new Vector3(1, 0.8f, 1.5f);
}
if (Input.GetKeyDown("k"))
transform.parent = null;
}
Ah yes, thank you so very much, especially for the quick reply! Worked wonderfully!
So I have a follow up to this question. I have multiple objects that I have added to the scene since and attached the code to each one of them. Naturally they all move at the same time along with the player when I left mouse click. Is there a way to have the script work for only the object that I'm clicking on and not every object that the script is attached to?
The same code works with void On$$anonymous$$ouseOver, but then the transform.parent = null; function won't work.