- Home /
How to release an object from a magnet through a press of a button
Hey guys,
I don't think this is going to be a tough question for you all. But, I spent an hour in just figuring out what to do. Well, to make things clear, I am making a Brick Breaker game and there is a Magnet power up. So, when I take the Magnet power up , then the ball sticks to my player but it doesn't leave my player even though I'm adding a force.
void OnTriggerEnter(Collider other)
if (other.transform.tag == "Magnet")
{
magnetOn = true;
other.gameObject.SetActive (false);
}
}
void OnCollisionEnter(Collision other)
{
if (other.transform.tag == "Ball" && magnetOn == true)
{
ball.transform.parent = gameObject.transform;
ball.transform.position = new Vector3 (gameObject.transform.position.x, -8f, 0f);
ballInPlay = false;
ball.GetComponent<Rigidbody> ().isKinematic = true;
}
}
One more thing, my ball is a kinematic object.
Thanks in advance
void OnCollisionStay(Collision other)
{
if (Input.GetButton("Jump") && ballInPlay == false)
{
ball.transform.parent = null;
ballInPlay = true;
ball.GetComponent<Rigidbody> ().isKinematic = false;
ball.GetComponent<Rigidbody> ().AddForce (initialBallVelocity, initialBallVelocity, 0f);
}
}
}
Answer by phxvyper · Jun 14, 2016 at 02:10 PM
You should put this "If Jump && ballInPlay is false" deal in the Update function, since I can almost certainly say that OnCollisionStay is NOT getting called every frame. You make the object a child of the paddle so Im certain theres some weird behaviour there.
void FixedUpdate() {
if (!ballInPlay && Input.GetButtonDown("Jump")) {
ball.transform.parent = null;
(Rigidbody ballRBody = ball.GetComponent<Rigidbody>()).isKinematic = false;
ballRBody.AddForce(initialBallVelocity, initialBallVelocity, 0f);
ballInPlay = true;
}
}
Also, instead of other.gameObject.SetActive(false);, you could probably invest in Destroy(other.gameObject);, unless you intentionally designed the game around setting the power ups active/inactive to simulate spawning them.
Edit:
Since you want to keep the Magnet powerup on for the entire scene after obtaining it, then you should NEVER set magnetOn to false. You already have an OnCollisionEnter that only holds the ball to the paddle if magnetOn is true, so don't set it to false.
I used @phxvyper sir's suggestion (putting the OnCollisionStay statements to the Update) and I added one more line before the "transform.parent = null" which is "magnetOn = false" so my ball is being launched but when the ball again collides with my paddle then it is not sticking to my paddle. Is anyone having an idea about this? Problem : How to keep the $$anonymous$$agnet power up active for the whole scene?
@phxvyper sir, if I don't make magnetOn = false, then the object is not being launched.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
How would you make an object behave like a magnet? 1 Answer