How do I make it so I only change the speed of the object clicked on

Right now i have a script that stops boulders falling and eventually destroys them after they play their animation.

I’m running into a problem where if there is more than 1 boulder on screen at a time it will change the speed of all of them but not destroy the boulder that wasn’t clicked on, how do i make it so i only change the speed of the boulder i click on?

 if (Physics.Raycast(ray, out hit, 100))
            {
                // whatever tag you are looking for on your game object
                if (hit.collider.tag == "Boulder")
                {
                    Debug.Log("---> Hit: ");
                   // GameObject.Destroy(hit.collider);
                    fallingboulder.speed = 0;
                    breakSource.Play();
                    foreach (Transform child in transform)
                    {
                        GameObject.Destroy(child.gameObject);
                    }
                    //add score
                    Destroy(hit.collider.gameObject, 0.4f);
                }

You aren’t getting a reference to the boulder you are hitting. I’m guessing that fallingboulder.speed is static. Each boulder should have its own class and speed variable. It may also suit your game for them to have their own audio source if you want 3D audio. Once each boulder has a class and the variables it needs, you can do something like this;

            if (Physics.Raycast(ray, out hit, 100))
            {
                //Check if we hit a boulder
                var boulder = hit.collider.GetComponent<MyBoulderClass>();
                //If we didn't, exit the method
                if (boulder == null)
                    return;

                boulder.speed = 0;
                boulder.breakSource.Play();

                Destroy(boulder.gameObject, 0.4f);             
            }

Worked perfectly! Thanks