- Home /
Right click and destroy game object.
Hello,
I'm working on a 2D type platformer game where you have to right click on separate objects to make them disappear. I just want them to be destroyed for now so I tried making an OnMouseOver function to work it, but it isn't always fool proof. Here's the code so far:
function OnMouseOver()
{
if (Input.GetMouseButtonDown(1))
{
Destroy(gameObject);
}
}
Any suggestions? Thanks.
It might help if you tell us how it isn't always fool proof.
What I mean is that it basically doesn't register the clicks and takes several tries before it finally finds the block I'm clicking on and deletes it.
Sorry for being unclear.
Answer by aldonaletto · Sep 29, 2011 at 01:02 AM
This script should work fine (if attached to the object). The object must be a GUIText, GUITexture or have a collider for OnMouseOver to work. Additionally, if the collider doesn't match the model shape (as when you have a CharacterController and a humanoid model) you may click on parts of the model without actually hitting its collider - or vice versa, destroying the object when clicking near to the model.
The worst thing about this script is that it must be attached to all destructible objects. If you want a single script to do this job, attach this one to the camera:
function Update(){ if (Input.GetMouseButtonDown(1)){ var ray = Camera.main.ScreenPointToRay(Input.mousePosition); var hit: RaycastHit; if (Physics.Raycast(ray, hit)){ Destroy(hit.transform.gameObject); } } }
This worked really well though it messes up some of my other code for placing blocks. I'm going to basically start over to make the game more tile based. But I'll be sure to keep this bit of coding in $$anonymous$$d. Thanks for your help.
Answer by Grady · Sep 29, 2011 at 01:16 AM
Yeah, you had if (Input.GetMouseButtonDown(1))
that will return if you right click.
For left click, you want if(Input.GetMouseButtonDown(0))
Hope this helps!!!!!
-Grady
Answer by SkandYxyz · Jan 07, 2021 at 12:51 PM
Hi,
You can use this code in the objects update method:
public class DestroyPlayAudio : MonoBehaviour
{
public AudioSource audioSource;
public AudioClip clip;
public float volume=0.5f;
void Update()
{
if (Input.GetButtonDown ("1"))
{
Raycast ray=Camera.main.ScreenPointToRay(Input.mousePosition);
Raycasthit hit;
if (Physics.Raycast(ray, out hit))
{
Destroy(hit.collider.gameObject);
audioSource.PlayOneShot(clip, volume);
}
}
}
}
Insert your audiofile in the variable slot in the Monobehaviour.
If you want to create games fast without coding learn and use Playmaker or Game Creator.