유니티 입력은 유니티 엔진에서 제공하는 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 |