소소한 개발 공부
[Unity] 터치 스와이프 구현하기 본문
유니티 툴로 터치를 감지하고 스와이프를 판정하려면 다음과 같은 코드를 사용할 수 있다.
void InputValue()
{
// 유니티 에디터 상 마우스 테스트 용
if (Input.GetMouseButtonDown(0))
{
dirChosen = false;
touchStartPoint = Input.mousePosition;
}
if (Input.GetMouseButton(0))
{
dir = new Vector2(Input.mousePosition.x, Input.mousePosition.y) - touchStartPoint;
}
if (Input.GetMouseButtonUp(0))
{
if (Mathf.Abs(dir.x) >= Mathf.Abs(dir.y))
movePos = new Vector3(dir.x, 0, 0).normalized;
else
movePos = new Vector3(0, 0, dir.y).normalized;
dirChosen = true;
}
// 터치 스크린
if (Input.touchCount > 0)
{
touch = Input.GetTouch(0);
switch(touch.phase)
{
case TouchPhase.Began :
dirChosen = false;
touchStartPoint = touch.position;
break;
case TouchPhase.Moved :
dir = touch.position - touchStartPoint;
break;
case TouchPhase.Ended :
if (Mathf.Abs(dir.x) >= Mathf.Abs(dir.y))
movePos = new Vector3(dir.x, 0, 0).normalized;
else
movePos = new Vector3(0, 0, dir.y).normalized;
dirChosen = true;
break;
}
}
}
InputValue 함수는 터치를 매 프레임마다 감지할 수 있게 Update문에 넣어 놓는 것을 추천.
🤔 MouseButtonDown ?
이 부분은 마우스 테스트 용으로
에디터 상에서 터치를 하려면 Unity Remote 앱을 다운 받아서 해야하기 때문에 번거롭다.
그래서 마우스 테스트를 스와이프 코드와 유사하게 작성해 놓는다.
🤔 스와이프를 감지하는 방법
1. Input.touchCount 는 현재 화면에 닿은 접촉 입력의 개수
2. touch 는 처음 입력을 받은 터치(첫 손가락?) 이고 이 터치의 상태에 따라 switch
3. 스와이프 감지는 (마지막으로 닿아있던 지점) - (첫 터치 지점)을 계산하고
4. 이를 Mathf.Abs로 절댓값을 이용해 상하(y축) 차이와 좌우(x축) 차이를 비교해 차이가 큰 부분으로 방향 벡터를 정한다.
=> 4번에서 계산을 통해 정한 방향 벡터가 스와이프 결과 방향이 되는 것.
예시로) 첫 터치가 (0,0) 지점에서 이루어졌는데 (2,0)에서 접촉이 끊겼다. => 방향 벡터는 (1,0) => 캐릭터는 오른쪽(x축의 양의 방향)으로 이동
'개발 > Unity' 카테고리의 다른 글
[Unity] 애니팡식 하트 충전 : 시간에 따른 값 충전 (0) | 2021.05.14 |
---|---|
[Unity] 스크립트 실행 우선순위 정하기 Script Execution Order (0) | 2021.05.09 |
[Unity] Raycast (0) | 2021.04.16 |
[Unity] DrawRay (0) | 2021.04.16 |
[Unity] 게임의 Undo 작성하기 (0) | 2021.03.27 |