반응형
기존에 만들었던 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;
}
}
}
반응형
'유니티 > 유니티 C#' 카테고리의 다른 글
[유니티/c#] json으로 데이터 관리하기 (0) | 2023.07.27 |
---|---|
[유니티/C#] Action을 활용한 InputManager (0) | 2023.07.26 |
[유니티/C#] SoundManager (0) | 2023.07.25 |
[유니티/C#] Reflection으로 enum 받아오기 (0) | 2023.07.22 |
[유니티/C#] 마우스 위치로 바라보기 (0) | 2023.07.12 |