728x90
반응형
특징
- OnMouseDrag
- 마우스를 사용하여 드래그할 때 발생하는 이벤트이다.
- 마우스 왼쪽 버튼을 누르고 있는 동안 지속적으로 발생하며, 마우스 커서의 위치에 따라 객체가 이동한다.
- 따라서 마우스 입력에 반응하고 객체의 위치를 조정하는데 사용된다.
- OnDrag
- 마우스, 터치, 게임패드 등 다양한 입력장치에서 발생할 수 있는 이벤트이다.
- 이 이벤트는 드래그 동작이 발생하는 모든 경우에 호출되는데, 마우스 왼쪽 버튼을 누르고 있는 상태일 필요가 없고, 마우스 외의 다른 입력 장치에서도 동작한다.
- 따라서 입력 이벤트 자체에 반응하며, 여러가지 동작을 처리하는데 사용된다.
💡 즉, OnMouseDrag는 마우스 왼쪽 버튼을 누르고 있는 동안에만 호출 되는 반면,
OnDrag는 여러 입력 장치에서 발생 할 수 있으며, 이벤트 발생 시 처리할 수 있는 다양한 동작이 있다.
구현 방식
- OnMouseDrag
- 사용자가 마우스 왼쪽 버튼을 누른다.
- 마우스 커서의 위치를 기준으로 드래그 이벤트가 시작된다.
- 마우스 커서가 이동하면서 OnMouseDrag 이벤트가 지속적으로 발생한다.
- 사용자가 마우스 왼쪽 버튼에서 손을 떼면 드래그 이벤트가 끝난다.
- OnDrag
- 사용자가 입력 장치(마우스, 터치, 게임 패드 등)를 사용하여 객체를 드래그 한다.
- 입력 장치의 위치를 기준으로 드래그 이벤트가 시작된다.
- 입력 장치가 이동하면서 OnDrag 이벤트가 지속적으로 발생한다.
- 사용자가 입력 장치에서 손을 떼면 드래그 이벤트가 끝난다.
💡 즉, OnMouseDrag는 마우스 왼쪽 버튼을 누른 상태에서만 작동되며, 마우스 커서의 위치에 따라 객체를 이동시키는 데 사용됩니다. 반면에 Ondrag는 다양한 입력 장치에서 동작하며, 입력 장치의 위치에 따라 객체를 이동시키는 데 사용됩니다.
또한, 이 두 이벤트는 모두 드래그 동작을 처리하는 데 사용되므로, 사용자의 입력에 따라 다양한 동작을 처리할 수 있습니다. 예를 들어, 객체를 이동하는 것 외에도 객체를 회전시키거나 크기를 조절하는 등의 동작을 처리할 수 있습니다.
그렇다면 OnMouseDrag함수는 터치가 안되는가 ?
- OnMouseDrag 이벤트는 주로 마우스 입력에 반응하도록 설계되어 있기 때문에, 터치 입력에 대한 지원은 제한적이다.
- 하지만 모바일 터치에 입력에 적용하려면 다음과 같은 방법을 사용해야 한다.
- Input.GetMouseButton() 함수를 사용하여 터치 입력을 감지하는데 마우스 왼쪽 버튼 대신에, 터치 입력의 특정 ID를 사용하여 입력을 감지할 수 있다.
- Input.mousePosition 대신에, 터치 입력의 위치 정보를 얻는 방법이 있는데, Input.touches를 사용하여 터치 입력을 감지하고, 각 터치의 위치와 ID 정보를 얻을 수 있다.
- OnMouseDrag 이벤트 대신에, Update() 함수에서 직접 드래그 동작을 처리하는 방법이 있는데, 이 경우에는 마우스 입력과 터치 입력 모두를 처리할 수 있다. - 비추천
💡 따라서, OnMouseDrag 이벤트를 모바일 터치 입력에 적용하려면 추가적인 작업이 필요하지만, 위와 같은 방법으로 구현할 수 있습니다. 그러나 터치 입력에 더욱 적합한 이벤트인 Ondrag를 사용하는 것이 더욱 효과적일 수 있습니다.
실 사용 예와 알아본 정보 검증
void OnMouseDrag()
{
if (BoardManager.I.gameOver)
return;
if (done) return;
SetScale(new Vector3(scale_hold, scale_hold, 1));
Vector3 mouseWorldPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
mouseWorldPosition.y += y_offset;
transform.SetPositionAndRotation(new Vector3(mouseWorldPosition.x, mouseWorldPosition.y, transform.position.z), Quaternion.identity);
draging = true;
draggingObject = gameObject;
GetComponent<Shape>().DraggingUpdate();
Shape shape = GetComponent<Shape>();
shape.CheckOneFitting();
}
- 위와같은 코드로 드래그를 구현하여 사용중인데, 알아본 사실과는 약간 다른것 같이 Input.mousePosition 변수를 사용하여 구현이 되어 있다.
- 그래서 추가로 알아본 사실에 의하면 OnMouseDrag() 함수는 마우스 입력 이벤트에 대한 콜백 함수인데 Unity는 Input.mousePosition 변수를 사용하여 마우스 외에도 모바일 터치 입력을 처리한다.
- Input.mousePosition은 마우스 입력이 아닌, 현재 입력 장치의 위치 정보를 반환하고 따라서 마우스나 모바일 터치 모두를 처리할 수 있다.
- 위 코드에서 input.mousePosition을 사용하여 마우스 입력을 처리하면서, 모바일 터치 입력도 함께 처리될수 있는데 이것은 Unity의 입력 처리 시스템의 유연성에 기인한 것이라고 한다.
번외 - Unity의 입력처리 시스템의 유연성 예시
- 다양한 입력 장치 지원: Unity는 마우스, 키보드, 조이스틱, 터치 등 다양한 입력 장치를 지원하고 또한 사용자 정의 입력 장치를 추가할 수도 있다.
- 입력 축(Axis) 설정: Unity는 입력 축(Axis) 설정을 통해 입력을 추상화하고, 다양한 입력 장치에 대해 일관된 처리를 할 수 있도록 지원한다.
- 입력 이벤트 처리: Unity는 입력 이벤트에 대한 콜백 함수를 제공하여 입력 처리를 쉽게 할 수 있도록 지원하고, 또한 유니티 에디터에서 이벤트를 시뮬레이션하여 입력 처리를 디버깅할 수 있다.
- 입력 모듈화: Unity는 입력 모듈화를 통해 게임의 입력 처리 로직을 분리하고, 입력 처리 로직을 재사용할 수 있도록 지원한다.
- VR 입력 처리: Unity는 VR 입력 처리를 위한 API를 제공하며, Oculus, HTC Vive, Windows MR 등 다양한 VR 플랫폼을 지원한다.
728x90
반응형
'Language > Unity' 카테고리의 다른 글
[Unity] Minify의 Use R8, Release, Debug 각 옵션에 대한 설명 (0) | 2023.03.28 |
---|---|
How to set AppLovin Max in Unity (0) | 2023.03.21 |
Unity C# 숫자 3자리마다 콤마 삽입 및 삭제하기 (0) | 2023.03.21 |