How do you Throw a Basketball towards a basket or Roll/kick it?

If my character just runs through it it should be kicked or rolled along the ground.
If my character picks it up then throws it , it should start a projectile path but shouldn’t land perfectly in the hoop always.

so how do you roll a ball along the ground?
i would need to make the ball rigidbody and apply Rotation? But how?

How about kicking it?

And how about shooting it as in basketball. Kicking it and shooting it should be different, kicking is kind of a projectile but it has snap power to it.
I dont know how to do it.

thank you

if u were rolling a rigidbody you would want to apply torque or relativetorque

rigidbody.AddTorque(Vector3.forward * 500);

the way in which u would kick the ball would depend on how u are animating the character, you could
add a collider to the Foot joint of your player character if it is a biped humanoid, you could also add this collider to a different layer so that it would only collider with the layer the ball is on.

alternatively u could use a raycast to determine if the foot makes contact while playing the kick animation, and there is also lerping u can use a lerp to move an object from A to B over a set amount of frames. its hard to provide a detailed answer when you haven’t provided information on how your character works, examples of raycast and lerp below.
this raycast uses the layer “Floor” to determine wether our Ray makes contact with the ground
contact respresents the point the raycast meets an object
u can also use this to grab a transform and tag like so

if(contact.transform.tag == "Floor") {
 do stuff here cause the raycast hit the floor
}

RaycastHit contact;
floorMask = LayerMask.GetMask ("Floor");

if(Physics.Raycast (transform.forward, out contact, 0.5f, floorMask)) {

}

transform.position = Vector3.Lerp(transform.position, toB.position, 0.01f);

u could use a 

Random.Value to affect the the position of toB
Random.Value returns a float ranging anywhere from 0 - 1.0
using in a multiplication, for 50/50 chance.
float RandomAmount = Random.Value;

if(RandomAmount  >= 0.5f) {

}
else if(RandomAmount  < 0.5f) {

}