유니티/유니티 C#

[유니티/C#] 모바일 환경 멀티터치 구현

진서박 2023. 8. 10. 23:09
반응형

기존에 만들었던 PC 게임을 모바일로 컨버팅 했다.

 

조이스틱을 조작하는 동시에 화면을 드래그해서 카메라를 회전시키는 방법을 기록해두려고 한다.

 

구현하기 쉬울줄 알았는데 생각대로 안되어서 시간을 좀 잡아먹었다.

 

    void CamRotate()
    {
    	// 들어온 터치입력 수만큼 반복
        for (int i = 0; i < Input.touchCount; i++)
        {
            // 들어온 터치 입력 순서대로 순회
            Touch t = Input.GetTouch(i);
            
            // UI를 터치하고 드래그 했을 때에는 회전하지 않도록 하기 위한 bool값
            bool isTouchingUI = EventSystem.current.IsPointerOverGameObject(t.fingerId);
            
            // 터치 입력의 상태에 따른 동작
            switch (t.phase)
            {
            	// 터치가 시작되었을 때
                case UnityEngine.TouchPhase.Began:
                    // 터치 입력이 화면의 오른쪽에서 이루어졌고
                    // 아직 오른쪽 입력이 이루어지지 않았고
                    // UI를 터치중이 아니라면
                    if (t.position.x > halfScreenWidth && rightFingerId == -1 && !isTouchingUI)
                    {
                    	// 오른쪽 터치 입력을 현재 터치입력의 번호로 저장
                        rightFingerId = t.fingerId;
                        // 터치 위치 저장
                        lastTouchPosition = t.position;
                    }
                    break;
                // 드래그 중일 때
                case UnityEngine.TouchPhase.Moved:
                    if (t.fingerId == rightFingerId && !isTouchingUI)
                    {
                    	// 현재 위치와 이전 위치와의 거리 저장
                        Vector2 delta = t.position - lastTouchPosition;
                        // cinemachine의 회전값에 거리 + 드래그 속도 만큼 더해줌
                        m_Cam.m_XAxis.Value += delta.x * ScreenDragSpeed;
                        // 최근 위치 갱신
                        lastTouchPosition = t.position;
                    }
                    break;
				
                // 손가락을 떼었을 때
                case UnityEngine.TouchPhase.Ended:
                    if (t.fingerId == rightFingerId)
                    {
                    	// 오른쪽 터치 입력 번호 초기화
                        rightFingerId = -1;
                        //Debug.Log("오른쪽 손가락 끝");
                    }
                    break;
            }
        }
    }

 

 

 

결과

 

반응형