본문 바로가기
유니티

유니티 키입력, 이동

by 실버dev 2019. 11. 2.

유니티 입력은 유니티 엔진에서 제공하는 Input 클래스를 사용한다.

입력방식은 주로 누르기(down), 누른채로 있기(stay), 떼기(up) 세가지로 분류된다.

 

 

- 아무키나 입력받았을 때

if(Input.anyKeyDown)
{
	Debug.Log("플레이어가 아무 키를 눌렀습니다.");
}

if(Input.anyKey)
{
	Debug.Log("플레이어가 아무 키를 누르고 있는 중입니다.");
}

 

 

- 키보드 입력하기

if (Input.GetKeyDown(KeyCode.LeftArrow))
	Debug.Log("왼쪽으로 이동 시작");
if (Input.GetKey(KeyCode.LeftArrow))
	Debug.Log("왼쪽으로 이동 중");
if (Input.GetKeyUp(KeyCode.LeftArrow))
	Debug.Log("왼쪽으로 이동 멈춤");

 

GetKeyDown, GetKey, GetUp 메서드로 누르기, 누른채로있기, 떼기 입력을 받음.

KeyCode로 무슨키를 입력했는지 설정함.

주의할점이 Enter키가 없고 대신 KeCode.Return으로 엔터를 받음.

 

 

 

- 마우스 입력하기

if (Input.GetMouseButtonDown(0))
	Debug.Log("마우스 왼쪽 버튼 클릭 시작");
if (Input.GetMouseButton(0))
	Debug.Log("마우스 왼쪽 버튼 클릭 중");
if (Input.GetMouseButtonUp(0))
	Debug.Log("마우스 왼쪽 버튼 클릭 멈춤");

같은 매커니즘이다. 

매개변수가 0이면 왼쪽클릭 1이면 오른쪽 클릭.

 

 

 

- 버튼

에딧 -> 프로젝트셋팅 -> Input 탭에서 버튼 설정이 가능하다.

인풋매니저에서는 버튼들이 설정되어 있고

이를 Input.GetButton 메서드로 사용할 수 있다.

 

if (Input.GetButtonDown("Jump"))
	Debug.Log("버튼 클릭 시작");
if (Input.GetButton("Jump"))
	Debug.Log("버튼 클릭 중");
if (Input.GetButtonUp("Jump"))
	Debug.Log("버튼 클릭 멈춤");

Positive Button으로 설정된 스페이스바를 누르면 작동한다.

 

 

if (Input.GetButton("Horizontal"))
{
	Debug.Log("횡 이동 중" + Input.GetAxis("Horizontal"));
	//GetAxis : X축 반환(float)
}

GetAxis 메서드는 축의 값을 반환한다.

Horizontal 버튼의 축 설정이 X축으로 되어 있어서 X축 값을 반환함.

 

 

 

- 이동하기

 

모든 게임 오브젝트는 하나의 Transform 컴포넌트를 가진다.

transform.Translate(new Vector3(5, 0, 0)); 
// transform은 기본적으로 이미 초기화가 완료된 변수임.

transform의 Translate 메서드로 이동이 가능하다.

2차원일때는 Vector2, 3차원일때는 Vector3을 인자로 받는다.

 

키입력에 따른 오브젝트 이동

void Update()
{
	if(Input.GetKey(KeyCode.LeftArrow))
		transform.Translate(new Vector3(-0.1f, 0, 0));
	if (Input.GetKey(KeyCode.RightArrow))
		transform.Translate(new Vector3(0.1f, 0, 0));
}

스크립트는 카메라에도 적용할 수 있다.

위 스크립트를 카메라에 적용하면 카메라가 움직임.

 

Vector3 vec = new Vector3(
	Input.GetAxis("Horizontal") * 0.1f,
	Input.GetAxis("Vertical") * 0.1f,
	0);
transform.Translate(vec);

버튼의 GetAxis를 사용해 이동할 수도 있다.

 

 

 

- Time.deltaTime

void Update()
{
	Vector3 vec = new Vector3(
	Input.GetAxis("Horizontal") * Time.deltaTime,
	Input.GetAxis("Vertical") * Time.deltaTime,
	0);
		transform.Translate(vec);
}

델타타임은? 1초 / 프레임이다.

Update는 프레임마다 실행되는 함수로 기기성능이 좋아서 프레임이 타 기종보다 높은경우 Update 함수 호출도 더 자주하게되어 캐릭터의 속도에 차이가 있을 수 있다.

델타타임은 이를 방지해준다.

'유니티' 카테고리의 다른 글

유니티 rigidbody  (0) 2019.11.07
유니티 오브젝트 충돌 관련 컴포넌트  (1) 2019.11.03
유니티 목표지점으로 이동하기  (1) 2019.11.02
유니티 라이프 사이클  (0) 2019.11.02
유니티용 C# 문법  (0) 2019.11.02