DNF LOVE

[Unity기초-4] 사용자 입력에 따른 Player를 이동시켜보자 - ② Start함수에서 컴포넌트를 받아오고, Update함수를 통해 사용자 입력에 따른 이벤트를 발생시켜보자. 본문

Programming/Unity

[Unity기초-4] 사용자 입력에 따른 Player를 이동시켜보자 - ② Start함수에서 컴포넌트를 받아오고, Update함수를 통해 사용자 입력에 따른 이벤트를 발생시켜보자.

botho 2019. 7. 19. 18:09
반응형

우선, Player에 붙여있는 하위 컴포넌트들을 받아오도록 하자.

컴포넌트를 받아오기 위해서는 해당 Object에 붙여 있는 스크립트 내 Start, Awake 함수 등 오브젝트가 활성화 되었을 때 1번만 받아와도 된다.

우선 변수들을 PlayerControler 스크립트에 선언하도록 하자.

private와 public은 접근 제한자인데 public을 사용하면 해당 인스펙터창에 보여지고, private를 사용하면 인스펙터창에 숨겨져 보인다.

public인 speed는 해당 인스펙터 스크립트에 보여지고 private은 rigidbody는 숨겨져 보인다.

public은 인스펙터창에서도 충분히 설정할 수 있는데 이 리지드바디는 어떻게 받아올까?

그것은 바로 활성 함수들을 통해 충분히 받아올 수 있다.

Start함수에 Rigidbody rb는 해당 오브젝트(this)의 컴포넌트를 받아오겠다(GetComponent 함수 사용)

무엇을? <Rigidbody> 를.

이 리지드 바디를 받아왔다는 것을 어떻게 확인할까?

그것은 디버그를 콘솔로 찍어보면 확인할 수 있다. (아니면 private를 public으로 바꿔도 된다.)

Debug.Log를 통해 로그를 찍어보면 해당 컴포넌트를 확인할 수 있다. 중단점을 찍지 않아도 로그를 확인할 수 있는 방법이다.

(물론 스크립트를 통해서 컴포넌트를 받아와도 되지만 public으로 바꾼다음 해당 컴포넌트를 집어넣어도 된다)

 

자, 다음은 사용자 입력에 따라 플레이어를 움직이기 전에, 사용자 입력에 따른 이벤트 처리를 해보도록 하자.

사용자 입력을 받는 방식에는 여러가지가 있다. 크게는

1> 마우스 입력 

  • GetMouseButton()         : () 안에 있는 클릭 값이 일치하면 클릭하는 동안 TRUE 를 리턴한다.
  • GetMouseButtonDown() : () 안에 있는 클릭 값이 일치하면 클릭을 한번 하면 TRUE 를 리턴한다.
  • GetKeyUp()                   : () 안에 있는 클릭 값이 일치하면 클릭을 했다가 떼면 TRUE 를 리턴한다.

    - 괄호 () 안에 있는 마우스 키 값은 세가지가 존재한다.

  1. 0 : 왼쪽 버튼
  2. 1 : 오른쪽 버튼
  3. 2 : 가운데(휠) 버튼

2> 키보드 입력 

  • GetKey()         : () 안에 있는 키가 일치하면 키를 누르는 동안 TRUE 를 리턴한다.
  • GetKeyDown() : () 안에 있는 키가 일치하면 키를 한번 누르면 TRUE 를 리턴한다.
  • GetKeyUp()     : () 안에 있는 키가 일치하면 키를 눌렀다가 떼면 TRUE 를 리턴한다.

등이 있다. 유니티에서는 마우스 입력보다는 키보드 입력을 더 많이 사용되기 때문에 키보드 입력 위주로 설명하도록 하겠다.

또, 이 키보드 입력을 사용하는 여러가지 종류가 존재한다.

1. If문 사용

  • 장점 : 직관적으로 이해하기 쉬움
  • 단점 : 입력받는 키가 많아질수록 코드가 다소 복잡해질 수 있다.

2. Switch 사용

  • 장점 : 직관적으로 이해하기 쉽다, if문보다 코드 관리가 용이하다.
  • 단점 : KeyCode.A는 소문자, 대문자 모두 가능하지만 스위치 문 내에서는 대문자만 사용이 가능하다.

3. Dictionary, delegate 사용

  • 장점 : 입력하는 키의 종류가 늘어나도 입력 키를 구분하는 코드의 증가가 적어 코드관리가 용이하다
  • 단점 : 키룰 눌렀을 때 호출되는 함수의 형식이 다양할 수록 초보자들에겐 다소 어려울 수 있다.

* if문 사용 예시>

Update()에 이렇게 코드를 치고 난 후, 게임을 실행하여 키보드를 누르면 누른 방향대로 로고가 찍히는 것을 확인할 수있다.

 

* Switch 예시>

우리는 기초를 배우고 있는 상황이기 때문에 다양한 방법으로도 똑같은 효과를 낼 수 있는 다양한 방법들을 배우는게 좋기 때문에 Switch문을 사용해보도록 하겠다.

Switch문이란? if문(조건문)의 업데이트 버전으로 조건변수와 그 조건변수의 값에 따라 절차적으로 코드를 실행하는 문법이다. 

Swtich(조건변수) {

 case 조건 : 

   실행문

 case 조건2 : 

   실행문 

   ..........

}

이런식으로 사용된다. Java에서는 String문이 불가한데 c#에서는 다양한 데이터타입에서 사용할 수 있다.

switch (Input.inputString){
            case "A":
                Debug.Log("A");
                break;
            case "B":
                Debug.Log("B");
                break;
            default:
                Debug.Log("Default");
                break;
}

Input.inputString은 이번 프레임에 들어온 키보드 입력을 반환한다.

유의할 점은 ASCII 문자만 /inputString/에 입력될 수 있다.


 

똑같은 기능을 수행하는 코드를 짤 때 정답이 없고 사람마다 스타일이 다를듯,

유니티에서 지원하는 기능 또한 같은 기능을 수행하더라도 다양한 방법을 통해 기능을 구현할 수 있다.

그러므로 어떤 구현 방식이 있는 것을 인지하도록 하자.

반응형