반응형

안녕하세요.

오늘은 모바일 게임에서 멀티터치로 카메라 줌인 / 줌아웃을 구현해보도록 하겠습니다.

줌인/줌아웃이 되는지 확인할 수 있도록 아무 객체나 생성합니다.

저는 큐브를 하나 생성하도록 하겠습니다.

그리고 빈프로젝트를 생성해서 스크립트를 추가하겠습니다.

생성한 스크립트에 다음과 같은 코드를 추가하겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class TouchManger : MonoBehaviour
{
    float m_fOldToucDis = 0f;       // 터치 이전 거리를 저장합니다.
    float m_fFieldOfView = 60f;     // 카메라의 FieldOfView의 기본값을 60으로 정합니다.
 
    void Update()
    {
        CheckTouch();
    }
 
    void CheckTouch()
    {
        int nTouch = Input.touchCount;
        float m_fToucDis = 0f;
        float fDis = 0f;
 
        // 터치가 두개이고, 두 터치중 하나라도 이동한다면 카메라의 fieldOfView를 조정합니다.
        if (Input.touchCount == 2 && (Input.touches[0].phase == TouchPhase.Moved || Input.touches[1].phase == TouchPhase.Moved))
        {
            m_fToucDis = (Input.touches[0].position - Input.touches[1].position).sqrMagnitude;
 
            fDis = (m_fToucDis - m_fOldToucDis) * 0.01f;
 
            // 이전 두 터치의 거리와 지금 두 터치의 거리의 차이를 FleldOfView를 차감합니다.
            m_fFieldOfView -= fDis;
 
            // 최대는 100, 최소는 20으로 더이상 증가 혹은 감소가 되지 않도록 합니다.
            m_fFieldOfView = Mathf.Clamp(m_fFieldOfView, 20.0f, 100.0f);
 
            // 확대 / 축소가 갑자기 되지않도록 보간합니다.
            Camera.main.fieldOfView = Mathf.Lerp(Camera.main.fieldOfView, m_fFieldOfView, Time.deltaTime * 5);
 
            m_fOldToucDis = m_fToucDis;
        }
    }
}
 
 
cs

유니티에서 테스트가 안되기 때문에(테스트하는 방법을 아신다면 댓글 남겨주시면 감사하겠습니다.) 애뮬레이터로 테스트했습니다.

저는 미뮤를 이용하여 테스트했습니다.

가상 키로 터치하는 위치를 정하고 마우스 터치를 하면서 줌인/줌아웃을 확인했습니다.

실행하면 줌인/줌아웃이 제대로 실행되는 것을 확인할 수 있습니다.

 

 

반응형
  1. ㅇㅇ 2021.04.28 18:24

    스마트폰에서 usb 디버깅 모드를 활성화 하시고 유니티 리모트5 앱을 이용하면 apk 설치없이 연결이 가능하더라구요

+ Recent posts