- Home /
GetKeyDown code turned into a int issue [SOLVED]
Hello everybody!
I was trying to do a simple invent system, and it became very painful haha. Here's what i've trying to do:
if(Input.anyKeyDown) {
//this will take the keys in the ASCII format, 49 -> 1, 50 -> 2
var e = System.Enum.GetNames(typeof(KeyCode)).Length;
for(int i = 0; i < e; i++) {
if(Input.GetKeyDown((KeyCode)i)) {
Destroy(actualWeapon);
actualWeapon = (GameObject)Instantiate (weapons[Convert.ToInt32(i)],
transform.position + (weaponLocation.position - transform.position),
transform.rotation);
//setting parent of the weapon
actualWeapon.transform.parent = transform;
Debug.Log ((int)i + " <- (int)key ---> " + (KeyCode)i + " <--- e -> " + e);
}
}
}
I wanna to instantiate the weapon according to the key pressed which can be 1 to 9. I know about the other issues like if the user press F, but focusing i wanna know how to "convert" the KeyCode to one int, cause everytime i try i it returns me the ASCII code like 1 turns into Alpha1 in KeyCode and in ASCII turns into 49.
Any help will be appreciated, thank you!
Answer by robertbu · Jan 08, 2014 at 07:15 PM
If I understand your question correctly, there are two ways for you to approach this problem. The first is to use the string version of Input.GetKeyDown():
if (Input.GetKeyDown(i.ToString())) {
I don't know if keycodes are guaranteed to map ASCII values, but this should work for most (if not all) platforms as well:
if (Input.GetKeyDown(KeyCode.Alpha0 + i))
Wow, it worked! I'm astonished, how can i miss that?! It's awesome, i could not understand when I try to instantiate something with the i variable that was turned into a string: Instantiate (weapons[i], transform.position + (weaponLocation.position - transform.position), transform.rotation);
How the variable i can be used in the vector as one index if was turned into a string?
It does not convert the original 'i' to a string. It makes the parameter a string.