본문 바로가기
Programming/Unity 기초탈출기

[Unity] 유니티 기초 탈출기 - Part.03 - 스크립트 편 ( 사용자 입력 이벤트 )

by 타임박스 2022. 5. 24.
반응형


✔ 기초탈출기 - 사용자 입력 처리

공중부양 게임(?) 제작



이번에는 사용자 입력 이벤트에 대해서 알아보겠습니다.

대표적인 사용자 입력 이벤트는 사용자가 마우스로 클릭하거나 키보드를 클릭했을때 발생되는 이벤트입니다. 

거의 대부분의 기능은 UI의 버튼을 생성해서 버튼 누를때 어떠한 동작을 하게 됩니다.

하지만 가끔 UI 버튼이 아니라 화면을 클릭했을때 구현을 해야할 경우가 있습니다.

예를 들어 화면을 누르고 드래그하면 화면이 이동된다던지... 휠로 줌 인/아웃을 구현한다던지

이런 기능은 버튼으로 할 수가 없잖아요?

사용자 입력이 언제 발생될지 모르기때문에 대부분이 Update 함수안에 구현되어야합니다.

 

● 마우스 입력 이벤트

이벤트 설명
GetMouseButton (int button) 마우스가 눌러지고 뗄때까지 여러번 호출됨 ( 누르고 있는거 처리할때 사용 )
GetMouseButtonDown (int button) 마우스가 눌러졌을때 한번만 호출됨
GetMouseButtonUp (int button) 마우스가 눌렀다가 뗄때 한번만 호출됨

파라미터로 들어가는 int Button의 숫자는 0~2까지로

0 : 마우스 왼쪽 버튼

1: 마우스 오른쪽 버튼

2: 마우스 휠 버튼

마우스 이벤트는 위와 같으며 사용법을 알아보자

유니티에서 스크립트를 하나 만들고 아무 오브젝트에 붙여주자

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

public class UserInputTest : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        //마우스 왼쪽 눌렀을때 
        if(Input.GetMouseButtonDown(0))
        {
            Debug.Log("누를때 발생!!");
        }
        else if(Input.GetMouseButton(0))
        {
            Debug.Log("누르고있을때!!");
        }
        else if(Input.GetMouseButtonUp(0))
        {
            Debug.Log("뗄때 발생!");
        }

        //마우스 휠을 위나 아래로 돌렸을때. 가만히 있으면 0값이다.
        if (Input.GetAxis("Mouse ScrollWheel") != 0f) // forward
        {
            Debug.Log("마우스 휠을 돌릴때!!");
        }
    }
}

마우스 왼쪽 버튼을 클릭해보면 Console창에서 로그가 찍히는 것을 볼 수 있다.

 

● 키보드 입력 이벤트

키보드의 특정 키를 눌렀을때 발생되는 이벤트를 처리한다.

마우스 이벤트와 사용법은 거의 비슷하다.

이벤트 설명
GetKey (KeyCode key) 키가 눌러지고 뗄때까지 여러번 호출됨 ( 누르고 있는거 처리할때 사용 )
GetKeyDown (KeyCode key) 키가 눌러졌을때 한번만 호출됨
GetKeyUp (KeyCode key) 키가 눌렀다가 뗄때 한번만 호출됨
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UserInputTest : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        //키보드 특정 키를 눌렀을때
        if(Input.GetKeyDown(KeyCode.Space))
        {
            Debug.Log("스페이스바 눌렀을때");
        }
        else if (Input.GetKey(KeyCode.Space))
        {
            Debug.Log("스페이스바 누르고있을때");
        }
        else if (Input.GetKeyUp(KeyCode.Space))
        {
            Debug.Log("스페이스바 뗄때");
        }
    }
}

 

● 실습 응용편 - 공중부양 게임(?) 만들기!!

이제 배웠으니 응용해서 사용해봐야겠죠?ㅎㅎ

물체를 공중에 띄우는 게임을 만들어보시죠!!

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

public class UserInputTest : MonoBehaviour
{
    private float jumpSpeed = 10;

    //게임이 시작될때 초기 위치값
    private float initY = 0;

    //사용자 입력 완료 여부 변수
    private bool isEnd = false;

    // Start is called before the first frame update
    void Start()
    {
        //초기 위치값을 저장한다.
        initY = transform.position.y;
    }

    // Update is called once per frame
    void Update()
    {
        //키보드 특정 키를 눌렀을때
        if (Input.GetKeyDown(KeyCode.Space))
        {
            //사용자 입력이 들어왔으니 완료 여부는 false로!
            isEnd = false;
        }
        else if (Input.GetKey(KeyCode.Space))
        {
            //누르고 있을때 위로 날아가라!!! 
            transform.Translate(Vector3.down * Time.deltaTime * jumpSpeed);
        }
        else if (Input.GetKeyUp(KeyCode.Space))
        {
            //뗏을때는 이제 이벤트 종료로 아래에서 처리!!
            isEnd = true;
        }

        if (isEnd)
        {
            //뗏을때는 밑으로 떨어져라!!!! 초기값보다는 못가게 해야겠죠?
            if (transform.position.y < initY)
            {
                transform.Translate(Vector3.up * Time.deltaTime * jumpSpeed);
            }
            else
            {
                //최종 목적지까지 도착했으니 이제 끝!
                isEnd = false;
            }
        }
    }
}

- 만드는 순서 - 

1. GameObject를 하나 만들어주세요. Cube, Sphere 등등 아무거나 상관없어요 ㅎㅎ

2. 만들어준 GameObject에 위 스크립트를 붙여주세요.

3. 스페이스바를 눌러봅니다.

 

게임을 즐겨봅니다!!! 우하하하하!!!

이렇게 만드는 방법말고 Rigidbody를 이용하면 훨씬 더 쉽게 만들 수 있는데

아직 배우지 않았으므로 Rigidbody 할때 다시 제작해보죠ㅎㅎ

 

벌써 게임을 하나 만드셨군요. 축하드려요. 생각보다 쉽죠? ㅎㅎ

감사합니다.

반응형

댓글