Unity Basic ch. 17] C#Script__ Input.GetKeyDown
게임은 기본적으로 상호작용을 바탕으로 하는데, 이번 장에서는 마우스와 키보드로 플레이어를 제어할 수 있는 스크립트에 대해서 알아봅시다.
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("왼쪽 화살표를 눌렀습니다.");
}
}
이번 챕터에서 살펴본 예제로 실제 유니티에서 방향키를 적용하지는 않습니다.
코드가 너무 길고 직관적이지 않기 때문입니다.
다음 챕터에서 좀 더 실용적인 코드를 짜봅시다.