이번 프레임에서 눌림
Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 56개 중 45번째.
isPressed는 누르고 있는 동안 매 프레임마다 "지금 눌려 있나?"에 답합니다. 누를 때 한 번만 일어나야 하는 동작을 위해 컨트롤에는 두 가지 답이 더 있습니다. wasPressedThisFrame은 키나 버튼을 누른 프레임에만 true이고, wasReleasedThisFrame은 키나 버튼을 다시 놓은 프레임에만 그렇습니다. 이는 Input.GetKeyDown과 Input.GetKeyUp, 그리고 GetMouseButtonDown과 GetMouseButtonUp을 대신합니다. 이 고무 도장은 마우스 버튼을 누르면 내려가고 놓으면 올라옵니다:
using UnityEngine;
using UnityEngine.InputSystem;
public class Stamp : MonoBehaviour
{
public float drop = 0.5f;
private int stamps;
void Update()
{
Mouse mouse = Mouse.current;
if (mouse.leftButton.wasPressedThisFrame)
{
transform.position += Vector3.down * drop;
stamps++;
Debug.Log("Stamp " + stamps);
}
if (mouse.leftButton.wasReleasedThisFrame)
{
transform.position += Vector3.up * drop;
}
}
}0.5초 동안 누른 클릭은 Stamp 1을 한 번 기록하고, 도장을 한 번 내렸다가 한 번 다시 올립니다. 첫 번째 if에서 isPressed를 사용하면 같은 클릭으로 도장이 약 30번 기록되고 도장은 책상 안으로 15단위만큼 내려갑니다. 키도 같은 방식으로 작동합니다. Keyboard.current.spaceKey.wasPressedThisFrame은 스페이스바를 누를 때마다 한 번 true가 됩니다.
챌린지
중급단거리 선수는 출발 블록에서 기다립니다. 스크립트에는 speed(6)과 crouch(0.3)가 있습니다.
- Space를 누르면 주자가 블록에 웅크립니다.
crouch단위만큼 아래로 이동하고Set이 기록됩니다. - 그 후 Space에서 손을 떼면 주자가 다시 일어섭니다(
crouch단위만큼 위로 이동).Go!가 기록되고 달리기가 시작됩니다. 그때부터 주자는 초당speed단위의 속도로 +z 방향을 따라 달립니다. - Space를 계속 누르고 있어도
Set은 프레임마다가 아니라 한 번만 기록됩니다. 주자가 달리기 시작한 후에는 Space를 눌러도 더 이상 아무 일도 일어나지 않습니다.
Keyboard.current를 사용해 Space를 읽습니다. Play를 누르고 Space를 누른 채로 있다가 손을 뗀 다음 Check를 누르세요.
직접 해보기
using UnityEngine;
using UnityEngine.InputSystem;
public class Sprinter : MonoBehaviour
{
public float speed = 6f;
public float crouch = 0.3f;
void Update()
{
// Space 키를 누르면: 웅크리고 Set을 로그에 기록합니다. Space 키를 떼면: 일어서서 Go!를 로그에 기록하고 달립니다.
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.