- Home /
Checking to see how many times a button was pressed in a certain amount of time?
I'm working on a fairly simple Hide & Seek game. In the game when a person that is hiding comes out to run to another hiding place, I want the player to try and tag them. When the player is close to the person, I want them to start tapping a button to get even closer and tag them. The button tapping should pull the player in closer or push them back depending on how fast the button is pressed.
I'm using a square (Player) and a triangle (NPC) to test this out. The triangle would be moving from waypoint to waypoint. While the triangle is in the middle of advancing, and when I am close to it, it will run away. If I get close enough, I want the player to start tapping a button in a certain amount of time to 'tag' the triangle.
Would I start with a OnTriggerEnter/OnTriggerExit? I am sort of new to scripting and I see a lot of people doing things differently as far as techniques go. Would really appreciate some feedback. Thanks!
Answer by Cherno · Jun 22, 2015 at 06:41 PM
OnTriggerEnter is a good start. Have it register collisions with a trigger collider that is on the triangle, but much larger so it encompasses the are that the player should be made to push the button. If a collision is registered, set a bool "nearTarget" to true. Use OnTriggerExit to set it it false again. In Update(), if nearTarget is true, check for button presses, and keep track of the time between two presses with Time.deltaTime. Something like this:
public bool nearTarget = false;
public float timeThreshold = 0.5f;
public float lastButtonPress;
public int buttonCount = 0;
public int buttonCountThreshold = 5;
OnTriggerEnter(Collider other) {
nearTarget = true;
lastButtonPress = Time.time;
buttonCount = 0;
}
OnTriggerExit(Collider other) {
nearTarget = false;
}
Update() {
if(nearTarget == true) {
if(Input.GetKeyDown(KeyCode.E)) {
if(Time.time - lastButtonPress < timeThreshold) {
lastButtonPress = Time.time;
buttonCount ++;
if(buttonCount >= buttonCountThreshold) {
//TAG!
}
}
else {
buttonCount = 0;
}
}
}
}
Thanks! Sorry for the long reply. Ive decided to show you what I came up with while I was awaiting an answer from someone. It was a simple trigger script for 'tagging' someone. I haven't been doing coding for long, but man this is actually a pretty fun sport to practice! Another problem has come up and i can't seem to find an answer. Is there a way to reference another collider in the OnTriggerEnter function?
Where it says: "(Collider other)", I don't want to use the collider attached to the current gameobject. i want to reference another collider. is that possible?
Answer by GeneGene28 · Jun 25, 2015 at 12:52 PM
public bool canTag = false;
void update()
{
if(canTag && Input.GetKeyUp(Keycode.E))
{
print("Tagged!");
}
}
void OnTriggerEnter(Collider other)
{
if(other.collider.tag == "Player")
{
canTag = true;
print ("You are near this person.");
}
}
void OnTriggerExit(Collider other)
{
if(other.collider.tag == "Player")
{
canTag = false;
print ("Too Far!.");
}
}
Your answer
Follow this Question
Related Questions
how to find time of a button pressed 2 Answers
Problem with finding the right syntax for time. 1 Answer
gui.button down 2 Answers
Press Any Key To Continue 0 Answers
Switch Camera On Button Press? 2 Answers