유니티/유니티 C#

[유니티/C#] 터치/마우스로 카메라 이동

진서박 2022. 8. 3. 20:45
반응형

출처 - 참고한 블로그

https://bloodstrawberry.tistory.com/686

 

유니티 - 드래그로 카메라 이동(Drag and Move Camera)

Unity 전체 링크 메인 카메라에 스크립트를 추가한다. 테스트하기 쉽게 왼쪽의 Alt가 입력된 경우에만 카메라가 움직이도록 하자. void Update() { if (Input.GetKeyDown(KeyCode.LeftAlt)) isAlt = true; if (In..

bloodstrawberry.tistory.com

 

전체 코드

public class CameraTest : MonoBehaviour
{
    float dragSpd = 30.0f;
    Vector2 clickPoint;
    
    void Awake()
    {
    	// 카메라 배율 초기화
        Camera.main.orthographicSize = 10;
    }

   
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
        	// 마우스가 눌렸을 때 마우스 좌표 저장
            clickPoint = Input.mousePosition;
        }

        if (Input.GetMouseButton(0))
        {
            Vector3 position = Camera.main.ScreenToViewportPoint((Vector2)Input.mousePosition - clickPoint);
            position.z = position.y;
            position.y = .0f;

            Vector3 move = position * (Time.deltaTime * dragSpd);

            float y = transform.position.y;

            transform.Translate(move);
            transform.transform.position = new Vector3(transform.position.x, y, transform.position.z);
        }
    }

}

 

변수 선언

float dragSpd = 30.0f;	// 드래그 스피드
Vector2 clickPoint;	// 클릭 시 좌표를 저장할 변수

 

카메라 이동

 if (Input.GetMouseButtonDown(0))
        {
            // 마우스가 처음 눌렸을 때 마우스 좌표 저장
            clickPoint = Input.mousePosition;
        }

        if (Input.GetMouseButton(0))
        {
            1. Vector3 position = Camera.main.ScreenToViewportPoint((Vector2)Input.mousePosition - clickPoint);
            2. position.z = position.y;
            3. position.y = .0f;
            4. float y = transform.position.y;
            
            // 1에 속도를 곱해서 translate로 전달
            Vector3 move = position * (Time.deltaTime * dragSpd);

            transform.Translate(move);
            transform.transform.position = new Vector3(transform.position.x, y, transform.position.z);
        }

1. ScreenToViewportPoint로 현재의 마우스 위치와 최초 클릭 시의 위치(clickPoint)의 차를 구함

2,3. 좌우, 앞뒤 이동으로 변경

4. y축을 고정 함으로써  카메라의 높이가 변경되는 것을 막음

 

 

카메라를 아이소메트릭뷰 형식으로 설정 후 이 코드를 적용하면 다음과 같이 움직인다

아쉬운 점은 드래그한 방향대로 움직이고, 드래그 후 터치를 유지하면 계속 카메라가 이동한다.

 

클래시 오브 클랜, 쿠키런 킹덤 같은 게임들 처럼 구현하고 싶은데.. 

반응형