반응형
출처 - 참고한 블로그
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축을 고정 함으로써 카메라의 높이가 변경되는 것을 막음
카메라를 아이소메트릭뷰 형식으로 설정 후 이 코드를 적용하면 다음과 같이 움직인다

아쉬운 점은 드래그한 방향대로 움직이고, 드래그 후 터치를 유지하면 계속 카메라가 이동한다.
클래시 오브 클랜, 쿠키런 킹덤 같은 게임들 처럼 구현하고 싶은데..
반응형
'유니티 > 유니티 C#' 카테고리의 다른 글
[유니티/C#] 라인렌더러를 이용한 움직이는 발판 (0) | 2023.06.16 |
---|---|
[유니티/C#] UI 슬라이드 기능 만들기 (DOTween) (0) | 2023.06.15 |
[유니티/C#] 터치로 화면이동 (0) | 2022.08.07 |
[유니티/C#] 모바일 푸시알림 (0) | 2022.08.03 |
[유니티/C#] 아이소메트릭 카메라 설정 (0) | 2022.08.03 |