사용자의 입력을 감지하는 프로그램

1. Update

 

게임 세상 속 모든 정보는 실시간으로 변하기 때문에, 이러한 정보를 주기적으로 체크할 필요가 있다

 

대부분의 게임은 주기적으로 갱신 처리를 실행

 

일반적으로 화면이 새로 그려지는 주기에 맞춰 실행

 

컴퓨터 화면은 1초에 60번 정도 화면을 새로 그리는데, 매번 새로 그리는 각각의 화면을 프레임이라고 부름

 

etc-image-0

 

 

1초동안 화면이 새로 그려지는 횟수를 FPS라고 부른다

 

PC나 콘솔게임 화면은 보통 60FPS, 화면을 1초에 60번 갱신하므로, 이전 프레임과 다음 프레임 사이 간격이 1/60초

 

60FPS는 평균값이고, 컴퓨터 성능에 따라 가변적이다.

 

Update() 메소드는 Start() 메소드처럼 특정 시점에 자동으로 실행되는 유니티 이벤트 메소드

 

한 프레임에 한 번, 매 프레임마다 반복 실행

 

etc-image-1

 

 

60fps로 화면이 갱신되면 Update() 메소드는 1/60초마다 실행되므로, 이렇게 짧은 간격으로 반복 실행되는

 

Update()를 사용하면 어떤 값이나 입력을 자주 체크해야하고 갱신하는 처리를 구현할 수 있다

 

 

2. Input

 

Input 클래스는 사용자 입력을 감지하는 메소드를 모아둔 집합

 

Input의 입력 감지 메소드는 실행 시점에 어떤 키를 눌렀는지 알려준다

 

Update()메소드는 1초에 수십번 실행되는데, 여기에 입력 감지 메소드를 사용하면, 매우 짧은 간격으로 반복 실행되므로,

 

플레이어는 입력이 즉시 감지된다고 느끼게 된다

 

etc-image-2

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public Rigidbody playerRigidbody; // 이동에 사용할 리지드바디 컴포넌트
    public float speed = 8f; //이동속력

    void Start()
    {

        
    }

    void Update()
    {

        if(Input.GetKey(KeyCode.UpArrow) == true)
        {
            //위쪽 방향키 입력이 감지된 경우 z 방향 힘 주기
            playerRigidbody.AddForce(0f, 0f, speed);
        }

        if(Input.GetKey(KeyCode.DownArrow) == true)
        {
            //아래쪽 방향키 입력이 감지된 경우 -z방향 힘 주기
            playerRigidbody.AddForce(0f, 0f, -speed);
        }

        if(Input.GetKey(KeyCode.RightArrow) == true)
        {
            //오른쪽 방향키 입력이 감지된 경우 x 방향 힘 주기
            playerRigidbody.AddForce(speed, 0f, 0f);
        }

        if(Input.GetKey(KeyCode.LeftArrow) == true)
        {
            //왼쪽 방향키 입력이 감지된 경우 -x 방향 힘 주기
            playerRigidbody.AddForce(-speed, 0f, 0f);
        }
        
    }
}

 

 

Input.GetKey()는 키보드의 식별자를 KeyCode 타입으로 입력 받는다

 

bool Input.GetKey(KeyCode key);

 

 

Input.GetKey() 메소드가 실행될 때 해당 키를 누르고 있으면 true, 그렇지 않으면 false

 

Update() 메소드가 1초에 수십번 실행되는데, Update() 내부에 

 

if (Input.GetKey(KeyCode.UpArrow) == true){
playerRigidbody.AddForce(0f,0f,speed);
}

 

 

코드는 1초에 수십번씩 실행된다

 

만약, Input.GetKey(KeyCode.UpArrow)가 실행되는 중, 키보드 위쪽 방향키를 누르고 있지 않으면 false

 

누르고 있으면 true를 반환

 

true를 반환하는 경우, player.Rigidbody.AddForce(0f,0f,speed);가 실행되므로, z축으로 speed만큼 힘이 가해짐

 

 

3. KeyCode

 

키보드의 키에는 식별자가 할당되어 있는데, 위쪽 방향키는 273이다.

 

각 키의 할당된 식별자를 모두 외울수는 없다.

 

KeyCode는 키보드의 키 식별자를 쉽게 가리키기 위한 타입으로, 내부적으로는 숫자이다.

 

KeyCode.UpArrow를 사용하면, 273에 대응하는 식별자를 사용하게 된다

 

 

4. Input.GetKey()

 

Input.GetKey()는 지정한 키를 '누르는 동안' true를 반환

 

Input.GetKeyDown()은 해당 키를 '누르는 순간' true를 반환

 

Input.GetKeyUp()은 해당 키를 누르다가 손을 "떼는 순간" true

 

여기서 Input.GetKeyDown()과 Input.GetKeyUp()은 해당 키를 '누르는 동안'에는 false

 

 

728x90