두 개의 키 입력을 동시에 받아야 할 때,
처음에는 Update문 안에서 아래와 같이 조건을 주었다
void Update()
{
if(Input.GetKeyDown(KeyCode.LeftArrow) && Input.GetKeyDown(KeyCode.RightArrow))
{
Debug.Log("LEFT ARROW & RIGHT ARROW");
}
}
근데 이게 좀 빡빡한 감이 있다
한 프레임 안에서 정말 정확하게 두 키가 동시에 눌려야 하기 때문이다
보통 사람이 두 개 키를 동시에 누른다고 하면 어느 정도는 타이밍 차이가 있을 수 밖에 없다
어느 정도 러프함이 필요했다
그래서 조금 더 인풋에 대한 러프함을 주기 위해 한 쪽을 GetKey로 받아주었다
void Update()
{
if(Input.GetKey(KeyCode.LeftArrow) && Input.GetKeyDown(KeyCode.RightArrow))
{
}
}
그리고 내가 구현하려는 기능의 경우 어떤 키가 먼저 눌리든 상관이 없었기에
else if 로 한 번 더 입력이 처리될 수 있는 기회를 주도록 구현했다
void Update()
{
if(Input.GetKey(KeyCode.LeftArrow) && Input.GetKeyDown(KeyCode.RightArrow))
{
Attack();
}
else if(Input.GetKeyDown(KeyCode.LeftArrow) && Input.GetKey(KeyCode.RightArrow))
{
Attack();
}
}
나의 경우에는 리듬게임에서 쓰려는건데
위 예시에서는 KeyCode.LeftArrow와 RightArrow만 있었지만,
만약 LeftArrow와 UpArrow 조합도 동시에 필요하다면 인식이 잘 될지 궁금했다
즉, LeftArrow로 시작되는 조합의 키가 여러 개여도 잘 동작할 것인가!
결론은 잘 된다
실제로 아래와 같이 코드를 쓰고 실행해보면
먼저 입력된 키에 대한 조건문으로 들어가게 된다
void Update()
{
if(Input.GetKey(KeyCode.LeftArrow) && Input.GetKeyDown(KeyCode.RightArrow))
{
Debug.Log("Track 1 & 2");
}
else if(Input.GetKeyDown(KeyCode.LeftArrow) && Input.GetKey(KeyCode.RightArrow))
{
Debug.Log("Track 2 & 1");
}
}
void Update()
{
// Track Test
// 1 & 2
if(Input.GetKey(KeyCode.LeftArrow) && Input.GetKeyDown(KeyCode.RightArrow))
{
Debug.Log("Track 1 & 2");
}
else if(Input.GetKeyDown(KeyCode.LeftArrow) && Input.GetKey(KeyCode.RightArrow))
{
Debug.Log("Track 2 & 1");
}
if (Input.GetKey(KeyCode.LeftArrow) && Input.GetKeyDown(KeyCode.UpArrow))
{
Debug.Log("Track 1 & 3");
}
else if (Input.GetKeyDown(KeyCode.LeftArrow) && Input.GetKey(KeyCode.UpArrow))
{
Debug.Log("Track 3 & 1");
}
}
void Update()
{
// Track Test
if(Input.GetKey(KeyCode.LeftArrow) && Input.GetKeyDown(KeyCode.RightArrow))
{
Debug.Log("Track 1 & 2");
}
else if(Input.GetKeyDown(KeyCode.LeftArrow) && Input.GetKey(KeyCode.RightArrow))
{
Debug.Log("Track 2 & 1");
}
if (Input.GetKey(KeyCode.LeftArrow) && Input.GetKeyDown(KeyCode.UpArrow))
{
Debug.Log("Track 1 & 3");
}
else if (Input.GetKeyDown(KeyCode.LeftArrow) && Input.GetKey(KeyCode.UpArrow))
{
Debug.Log("Track 3 & 1");
}
if (Input.GetKey(KeyCode.LeftArrow) && Input.GetKeyDown(KeyCode.DownArrow))
{
Debug.Log("Track 1 & 4");
}
else if (Input.GetKeyDown(KeyCode.LeftArrow) && Input.GetKey(KeyCode.DownArrow))
{
Debug.Log("Track 4 & 1");
}
}