눌림, 유지, 해제
Coddy Unity 여정의 Unity 스크립팅 기초 섹션에 포함된 레슨. 67개 중 12번째.
Unity는 키에 대해 세 가지 서로 다른 정보를 알려줄 수 있으며, 각 정보는 Update()에서 확인합니다:
Input.GetKeyDown(KeyCode.Space): 이번 프레임에 Space 키를 눌렀나요? 한 번 누를 때 프레임 하나에서만 true입니다.Input.GetKey(KeyCode.Space): 지금 Space 키를 누르고 있나요? Space 키를 누르고 있는 동안 매 프레임 true입니다.Input.GetKeyUp(KeyCode.Space): 이번 프레임에 Space 키를 뗐나요? 키를 놓는 프레임 하나에서만 true입니다.
초당 60프레임으로 0.5초 동안 Space 키를 누르고 있으면, GetKey는 30개 프레임에서 true이고, GetKeyDown은 그중 첫 번째 프레임에서, GetKeyUp은 마지막 프레임 다음 프레임에서 true입니다. 한 번 누를 때 한 번 발사하는 대포라면 GetKeyDown을 확인합니다. GetKey를 사용하면 한 번 눌렀을 때 30발이 발사됩니다:
public int shots = 0;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
shots++;
Debug.Log("Shots fired: " + shots);
}
}GetKeyUp은 플레이어가 키를 놓을 때 일어나는 동작에 사용합니다. 예를 들어 달리기가 끝나는 경우입니다. 세 가지 모두 현재 프레임에 대해서만 답하므로 Update()에서 확인해야 합니다. Update()는 매 프레임 실행되지만 Start()는 한 번만 실행되므로 거의 모든 키 입력을 놓치게 됩니다.
챌린지
쉬움스페이스 키를 누르고 있는 동안 새총이 충전됩니다. 스페이스 키를 누르고 있는 매초마다 charge가 1씩 증가하고, 누르고 있지 않을 때는 증가하지 않습니다. 스페이스 키에서 손을 떼면 Charge: 뒤에 충전량을 기록한 다음(예: Charge: 1.5), 다음 발사를 위해 charge를 다시 0으로 설정하세요.
플레이를 누르고 스페이스 키를 누른 다음 손을 떼면서 콘솔을 확인하세요. 그런 다음 확인을 누르세요.
직접 해보기
using UnityEngine;
public class Slingshot : MonoBehaviour
{
float charge = 0f;
void Update()
{
// Space를 누르고 있는 동안: charge가 매초 1씩 증가합니다.
// Space에서 손을 떼면: charge를 로그에 기록한 다음 0으로 되돌립니다.
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.