Menu
CoddyTech

눌림, 유지, 해제

Coddy Unity 여정의 Unity 스크립팅 기초 섹션에 포함된 레슨. 85개 중 19번째.

Unity는 키에 대해 세 가지 서로 다른 정보를 알려 줄 수 있으며, 각 정보는 Update()에서 확인합니다:

  • Input.GetKeyDown(KeyCode.Space): 이번 프레임에 스페이스 키를 눌렀나요? 키를 누를 때마다 한 프레임 동안 true입니다.
  • Input.GetKey(KeyCode.Space): 지금 스페이스 키를 누르고 있나요? 키를 누르고 있는 동안 매 프레임 true입니다.
  • Input.GetKeyUp(KeyCode.Space): 이번 프레임에 스페이스 키에서 손을 뗐나요? 키에서 손을 뗄 때 한 프레임 동안 true입니다.

초당 60프레임일 때 스페이스 키를 0.5초 동안 누르고 있으면, 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()는 한 번만 실행되므로 거의 모든 키 입력을 놓치게 됩니다.

challenge icon

챌린지

쉬움

Space 키를 누르고 있는 동안 새총이 충전되고, 키를 놓으면 발사 결과를 보고합니다.

  1. Update()에서 Input.GetKey(KeyCode.Space)가 true인 동안 Time.deltaTime을 charge에 더하세요.
  2. Input.GetKeyUp(KeyCode.Space)일 때 "Charge: " + charge를 로그에 기록한 다음, charge를 0으로 설정하세요.

‘플레이’를 누르고 Space 키를 누른 채로 있다가 놓으세요. Console에 Charge: 1.5와 같은 줄이 표시됩니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;

public class Slingshot : MonoBehaviour
{
    float charge = 0f;

    void Update()
    {
        // Space를 누르고 있는 동안: charge가 매초 1씩 증가합니다.
        // Space에서 손을 떼면: charge를 로그에 기록한 다음 0으로 되돌립니다.
    }
}

Unity 스크립팅 기초의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드