- Home /
Why my keypad shows 4x the number in input?
Hello, I got a keypad script, everything works fine (if input=password) door opens. The problem is that if i press num2, in input it looks like this : 2222. (viz. link, left corner) http://imgur.com/a/XlBvj Any ideas? Thank you
/script/
public class Keypad : MonoBehaviour {
public string curPassword = "12345";
public string input;
public bool onTrigger;
public bool doorOpen;
public bool keypadScreen;
public Transform doorHinge;
public GameObject bodka;
void OnTriggerEnter(Collider other)
{
onTrigger = true;
}
void OnTriggerExit(Collider other)
{
onTrigger = false;
keypadScreen = false;
input = "";
}
void Update()
{
if(input == curPassword)
{
doorOpen = true;
}
if(doorOpen)
{
var newRot = Quaternion.RotateTowards(doorHinge.rotation, Quaternion.Euler(0.0f, 90.0f, 0.0f), Time.deltaTime * 250);
doorHinge.rotation = newRot;
bodka.SetActive (false);
}
}
void OnGUI()
{
if(!doorOpen)
{
if(onTrigger)
{
GUI.Box(new Rect(0, 0, 400, 50), "'E' to open keypad");
if(Input.GetKeyDown(KeyCode.E))
{
keypadScreen = true;
onTrigger = false;
}
}
if(keypadScreen)
{
GUI.Box(new Rect(0, 0, 640, 70), "");
GUI.Box(new Rect(10, 10, 620, 50), input);
GUI.Label(new Rect(10, 60, 200, 50), "'Esc' to exit");
if(Input.GetKeyDown(KeyCode.Escape))
{
keypadScreen = false;
}
if(Input.GetKeyDown(KeyCode.Alpha0) || Input.GetKeyDown(KeyCode.Keypad0))
{
input = input + "0";
}
if(Input.GetKeyDown(KeyCode.Alpha1) || Input.GetKeyDown(KeyCode.Keypad1))
{
input = input + "1";
}
if(Input.GetKeyDown(KeyCode.Alpha2) || Input.GetKeyDown(KeyCode.Keypad2))
{
input = input + "2";
}
if(Input.GetKeyDown(KeyCode.Alpha3) || Input.GetKeyDown(KeyCode.Keypad3))
{
input = input + "3";
}
if(Input.GetKeyDown(KeyCode.Alpha4) || Input.GetKeyDown(KeyCode.Keypad4))
{
input = input + "4";
}
if(Input.GetKeyDown(KeyCode.Alpha5) || Input.GetKeyDown(KeyCode.Keypad5))
{
input = input + "5";
}
if(Input.GetKeyDown(KeyCode.Alpha6) || Input.GetKeyDown(KeyCode.Keypad6))
{
input = input + "6";
}
if(Input.GetKeyDown(KeyCode.Alpha7) || Input.GetKeyDown(KeyCode.Keypad7))
{
input = input + "7";
}
if(Input.GetKeyDown(KeyCode.Alpha8) || Input.GetKeyDown(KeyCode.Keypad8))
{
input = input + "8";
}
if(Input.GetKeyDown(KeyCode.Alpha9) || Input.GetKeyDown(KeyCode.Keypad9))
{
input = input + "9";
}
}
}
}
}
Answer by tanoshimi · Feb 13, 2017 at 05:39 PM
That's because you're checking for keyboard input in OnGUI, which gets called multiple times each frame. You should always check for input in Update(), which is the main game loop, and only use OnGUI for GUI (although, to be honest, you shouldn't really even use OnGUI anymore - you should use UnityEngine.UI - https://unity3d.com/learn/tutorials/topics/user-interface-ui).
I changed it and pined getdownkey in update. but now it doesnt show anything in input when pressed.
Answer by KaushikRahul · Feb 14, 2017 at 12:43 PM
For Numpad keys use : Keypad0 = 0, Keypad1 = 1, . . . . Keypad9 = 9.
For Example :
void Update () {
if (Input.GetKeyDown(KeyCode.Keypad0))
{
Debug.Log("Pressed");
}
}
Your answer
Follow this Question
Related Questions
Mouse and Oculus Touch Controller Inputs 0 Answers
Change a float smooth 2 Answers
gui list problem 2 Answers
Touch Input with Event Trigger. How to handle with it properly. 0 Answers
Access function in another script cause Object reference error 1 Answer