- Home /
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);
}
Answer by WarmedxMints · Mar 04, 2019 at 02:00 AM
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);
}
Your answer
Follow this Question
Related Questions
using Contains(gameObject) to find and destroy a gameObject from a list 2 Answers
Buttons still visible after Destroy() but say "deleted gameobject" in hierarchy 1 Answer
Cannot destroy objects 0 Answers
Destroy object when transform.position.x > 10. 1 Answer
How do I make Destroy(gameObject) work in my script? 1 Answer