Using Raycast, add force on the touched point of a gameobject
Hello. what I am trying to accomplish is that i want my gameobject:- a ball, to bounce from the touched point. I mean, it moves upward if i touched it anywhere. If i touched it on the right side, i want it to move to the left and so on. Please don't mind my english or explanation.
Here's my code for the raycast: it works fine in moving the ball in upward direction no matter where i touched on the ball.
if (Input.GetMouseButtonDown (0)) {
Vector3 mousePosFar = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, Camera.main.farClipPlane);
Vector3 mousePosNear = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, Camera.main.nearClipPlane);
Vector3 mousePosF = Camera.main.ScreenToWorldPoint (mousePosFar);
Vector3 mousePosN = Camera.main.ScreenToWorldPoint (mousePosNear);
RaycastHit hit;
if (Physics.Raycast (mousePosN, mousePosF - mousePosN, out hit)){
hit.transform.gameObject.GetComponent<Rigidbody> ().AddForce (0, jumpForce, 0, ForceMode.VelocityChange);
}
maybe add force at position is the solution but i don't know how to do it.
any help would be really really helpful....Thank you very much.
Answer by Jawchewa · May 20, 2017 at 02:54 AM
You could use the offset of the hit point and the objects origin to achieve this. Try replacing the line where you are applying the force with this:
hit.transform.gameObject.GetComponent<Rigidbody>().AddForce((hit.collider.gameObject.transform.position - hit.point).normalized * jumpForce, ForceMode.VelocityChange);
Thank you. But the ball does not move in the y-direction. just in the x and z . Only when i touch the top of the ball, it bounces upward. I want it to bounce the opposite to where i touch. I'm trying to jiggle the ball, holding it in the air as long as possible.How can i achieve this? Thank you for your time.