- Home /
(C#) Clicking on gameObject to select, clicking off to deselect
Hey guys, I'm trying to create a script that causes a gameObject to become "selected" by clicking on it, then DESTROY the object if I click it again while it is still "selected". Clicking off of the object will make it "deselected". I've found some varying examples in js, but I'm really trying to keep all of my scripts consistent in the same language, so C# is preferable.
Thanks in advance!
So, what are you asking us for? Advice on how to set this mechanic up or to code the mechanic for you?
Have you attempted to script the mechanic yet? If yes, post the code you have and we can help. If not, give it a try yourself and come back after you have at least attempted to build it!
use bools as states.
if (!selected and clicked ) { selected }
else if (selected and clicked){ destroy }
Answer by Mikael-Gyth · Jul 15, 2013 at 06:28 PM
I had a similar problem. I simply put an invisible plane underneath the objects that I wanted to select, and if I didn't click on one of the objects I would hit that plane and trigger a deselect.
Answer by CNormandy · Oct 01, 2012 at 08:57 PM
Here's what I have now. Basically, IsTargeted is set to true when the Object is clicked on. And when IsTargeted is true, if the user clicks on that object again, it destroys the object. Still don't have the deselect working.
#pragma strict
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Selected : MonoBehaviour
{
public bool IsTargeted = false;
public bool IsDestroyed = false;
public RaycastHit hit = new RaycastHit();
public Ray ray;
public int number = 0;
void Update ()
{
selection();
if (IsTargeted)
{
Debug.Log("Targeted");
return;
}
if (IsDestroyed)
{
Destroy();
return;
}
}
void selection()
{
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if(Input.GetKey(KeyCode.Mouse0))
{
if(Physics.Raycast(ray,hit,100))
{
if(hit.transform.tag == "Hostile")
{
if ( IsTargeted() )
{
bool IsDestroyed = true;
return;
}
if (!IsTargeted)
{
bool IsTarget = true;
return;
}
}
}
}
}
}
Answer by BoredEagle · Nov 07, 2015 at 02:54 PM
On line 41 the if statement is calling a method IsTargeted() loose the () and see if that fixes it.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Combine two scripts 0 Answers
c# to compile xml string as code during runtime 1 Answer
How do I set a maximum character limit to my textbox C#? 1 Answer