Unity Basic/03. Unity C# script basic

Unity Basic ch. 17] C#Script__ Input.GetKeyDown

올매 2020. 4. 28. 01:37

게임은 기본적으로 상호작용을 바탕으로 하는데, 이번 장에서는 마우스와 키보드로 플레이어를 제어할 수 있는 스크립트에 대해서 알아봅시다.

 

1) Input.GetKeyDown( 키코드)

 

키코드의 버튼이 눌렀는지 가져오는 구문이다. 여기에서 키코드는 유니티에서 제공해주는 문서를 참고하면 되겠다.

https://docs.unity3d.com/ScriptReference/KeyCode.html

 

 

기본적으로 방향 키에 대해서 살펴보자.

 

**방향키 키코드

UpArrow
DownArrow
RightArrow
LeftArrow

 

그렇다면 구체적인 예를 통해서 어떻게 스크립팅하는지 살펴보자.

 

만약에 위로 방향키를 누르면 위 화살표를 눌렀다고 메세지를 띄우는 코딩을 해보자.

 

-----------------

만약. 입력.키를눌렀을때(키코드)

=>

if(Input.GetKeyDown(KeyCode.UpArrow)

-----------------

 

=================

public class PlayerMove : MonoBehaviour
{
    void Start()
    {
       
    }

    void Update()
    {
       if(Input.GetKeyDown(KeyCode.UpArrow)){
            Debug.Log("위 화살표를 눌렀습니다.");
        }
    }    
}

=================

플레이 버튼을 누르고 위 화살표를 눌러보자.

 

* 더해보기

아래, 오른쪽, 왼쪽 키를 눌렀을때 각각 해당하는 메세지를 보이는 코딩을 해보자.

 

===================

public class PlayerMove : MonoBehaviour
{
    void Start()
    {
       
    }

    void Update()
    {
       if(Input.GetKeyDown(KeyCode.UpArrow)){
            Debug.Log("위 화살표를 눌렀습니다.");
   }else if(Input.GetKeyDown(KeyCode.DownArrow)){
            Debug.Log("아래 화살표를 눌렀습니다.");
   }else if(Input.GetKeyDown(KeyCode.RightArrow )){
            Debug.Log("오른쪽 화살표를 눌렀습니다.");
   }else if(Input.GetKeyDown(KeyCode.LeftArrow)){
            Debug.Log("왼쪽 화살표를 눌렀습니다.");
   }
    }    
}

===================

 

 

 

 

2) 방향키를 눌렀을때 위치를 변경해보자

방향키를 눌렀을때, gameObject의 transform position을 변경해보자.

 

위화살표를 눌렀을때 위로(x,y,z=0,1,0) 이동해보자.

 

* new Vector3(0,1,0) = Vector3.up;

 

===================

public class PlayerMove : MonoBehaviour 
{ 
    void Start() 
    { 
        
    } 

    void Update() 
    { 
       if(Input.GetKeyDown(KeyCode.UpArrow)){ 
            Debug.Log("위 화살표를 눌렀습니다."); 

            transform.position = Vector3.up;
        }
    }     
}

===================

 

플레이 버튼을 누르고 위 화살표를 누르면

포지션에 y부분이 1로 되면서 플레이어가 위로 이동해 있는 것을 알 수 있다.

 

* 더해보기

아래, 오른쪽, 왼쪽 키를 눌렀을때 각각 해당하는 이동을 하는 코딩을 해보자.

===================

    void Update()
    {
       if(Input.GetKeyDown(KeyCode.UpArrow)){
            transform.position = Vector3.up*speed;
            Debug.Log("위 화살표를 눌렀습니다.");
   }else if(Input.GetKeyDown(KeyCode.DownArrow)){
            transform.position = Vector3.down*speed;
            Debug.Log("아래 화살표를 눌렀습니다.");
   }else if(Input.GetKeyDown(KeyCode.RightArrow )){
            transform.position = Vector3.right*speed;
            Debug.Log("오른쪽 화살표를 눌렀습니다.");
   }else if(Input.GetKeyDown(KeyCode.LeftArrow)){
            transform.position = Vector3.left*speed;
            Debug.Log("왼쪽 화살표를 눌렀습니다.");
   }
===================

 

 

 

3) 오브젝트 위치 더하기

위와 같이 코딩하면 키를 누르면 정확히 그 위치로만 이동해서 한번 더 눌렀을때 더이상 이동하지 않는다.

키를 누를때마다 위로 올라가는 코딩을 해보자. 일단 플레이어의 중력을 꺼보자.

플레이어의 Rigidbody 2D에 Gravity Scale =0으로 두자

 

오브젝트 위치에서 방향을 값을 갖는 예약어를 다시 한번 떠올려보자.

 

** 방향

transform.right

transform.up

transform.forward

 

반대쪽 방향은 (-1)을 곱하면 됩니다.

 

왼쪽 = transform.right*(-1)

아래 = transform.up*(-1)

뒤 = transform.forward*(-1)

*******************************

 

위로 눌렀을때

오브젝트의 포지션은 현재 오브젝트의 포지션에서 위로 한칸을  더해주면된다.

----------------------------

transform.position = transform.position+ transform.up;

 

여기에서 transform.position이중 복되어서 아래와 같이 사용하도록 약속되었다.

 

transform.position += transform.up;

----------------------------

 

===================

public class PlayerMove : MonoBehaviour 
{ 
    void Start() 
    { 
        
    } 

    void Update() 
    { 
       if(Input.GetKeyDown(KeyCode.UpArrow)){

            transform.position += transform.up;

            Debug.Log("위 화살표를 눌렀습니다.");
        }
    }     
}

===================

 

* 더해보기

아래, 오른쪽, 왼쪽 키를 눌렀을때 각각 해당하는 이동을 하는 코딩을 해보자.

 

void Update()
    {
       if(Input.GetKeyDown(KeyCode.UpArrow)){
            transform.position += transform.up;
            Debug.Log("위 화살표를 눌렀습니다.");
   }else if(Input.GetKeyDown(KeyCode.DownArrow)){
            transform.position += transform.up*(-1);
            Debug.Log("아래 화살표를 눌렀습니다.");
   }else if(Input.GetKeyDown(KeyCode.RightArrow )){
            transform.position += transform.right;
            Debug.Log("오른쪽 화살표를 눌렀습니다.");
   }else if(Input.GetKeyDown(KeyCode.LeftArrow)){
            transform.position += transform.right*(-1);
            Debug.Log("왼쪽 화살표를 눌렀습니다.");
   }

 

 

 

 

4) 스피드 추가하기

 

변수를 선언하고 초기화해서 스피드를 추가해보자. 

 

*변수선언

public float speed; 

 

*변수 초기화/값넣기

speed에 값을 주면 초기화 완료

위 화살표를 눌렀을때 speed값만큼 위로 올라가도록 코딩해보자.

 

===================

public class PlayerMove : MonoBehaviour 
{ 
    void Start() 
    { 
        
    } 

    void Update() 
    { 
            if(Input.GetKeyDown(KeyCode.UpArrow)){ 
            transform.position += transform.up*speed; 
            Debug.Log("위 화살표를 눌렀습니다.");
        }
    }     
}

===================

 

 

* 더해보기

아래, 오른쪽, 왼쪽 키를 눌렀을때 스피드 값만큼 이동을 하는 코딩을 해보자.

 

    void Update()
    {
       if(Input.GetKeyDown(KeyCode.UpArrow)){
            transform.position += transform.up*speed;
            Debug.Log("위 화살표를 눌렀습니다.");
   }else if(Input.GetKeyDown(KeyCode.DownArrow)){
            transform.position += transform.up*(-1)*speed;
            Debug.Log("아래 화살표를 눌렀습니다.");
   }else if(Input.GetKeyDown(KeyCode.RightArrow )){
            transform.position += transform.right*speed;
            Debug.Log("오른쪽 화살표를 눌렀습니다.");
   }else if(Input.GetKeyDown(KeyCode.LeftArrow)){
            transform.position += transform.right*(-1)*speed;
            Debug.Log("왼쪽 화살표를 눌렀습니다.");
   }

 

 

 

이번 챕터에서 살펴본 예제로 실제 유니티에서 방향키를 적용하지는 않습니다.

코드가 너무 길고 직관적이지 않기 때문입니다.

다음 챕터에서 좀 더 실용적인 코드를 짜봅시다.