I am very new to C#. I am creating something in Unity to help me learn C# and Unity better.
I want to know why:
Input.GetKeyDown(KeyCode.UpArrow))
Only fires once when placed within:
void Update()
Since update is a loop, why is it not fired while I hold the key down (in my case causing a sphere to move)?
I have managed to get it working by using two bools that are altered when the key is pressed and released.
Here is my full script that I am playing with to move a sphere and simulate acceleration/deceleration:
using UnityEngine;
using System.Collections;
public class sphereDriver : MonoBehaviour {
int x ;
bool upPressed = false ;
bool downPressed = false ;
void Start()
{
x = 0 ;
}
void Update ()
{
if(x > 0) {
x -= 1 ;
}
if(x < 0) {
x += 1 ;
}
if(Input.GetKeyDown(KeyCode.UpArrow))
{
upPressed = true ;
}
else if(Input.GetKeyUp(KeyCode.UpArrow))
{
upPressed = false ;
}
if(upPressed == true)
{
x += 5 ;
}
if(Input.GetKeyDown(KeyCode.DownArrow))
{
downPressed = true ;
}
else if(Input.GetKeyUp(KeyCode.DownArrow))
{
downPressed = false ;
}
if(downPressed == true)
{
x -= 5 ;
}
transform.Translate(x * Time.deltaTime/10, 0, 0) ;
}
}
The documentation says that this is the normal, expected behavior.
You probably want to use GetButton or GetAxis instead, since those indicate “pressed” as long as the key is held down (GetButton returns true, GetAxis returns 1).