/// <summary> /// 最大化時以外なら、マウスドラッグによってウィンドウを移動 /// </summary> void DragMove() { if (uniWin == null) { return; } // ドラッグでの移動が無効化されていた場合 if (!enableDragMove) { isDragging = false; return; } // 最大化状態ならウィンドウ移動は行わないようにする bool isFullScreen = uniWin.IsMaximized; #if !UNITY_EDITOR // フルスクリーンならウィンドウ移動は行わない // エディタだと true になってしまうようなので、エディタ以外でのみ確認 if (Screen.fullScreen) { isFullScreen = true; } #endif if (isFullScreen) { isDragging = false; return; } // マウスドラッグでウィンドウ移動 if (Input.GetMouseButtonDown(0)) { lastMousePosition = UniWinApi.GetCursorPosition(); isDragging = true; } if (!Input.GetMouseButton(0)) { isDragging = false; } if (isDragging) { Vector2 mousePos = UniWinApi.GetCursorPosition(); Vector2 delta = mousePos - lastMousePosition; lastMousePosition = mousePos; Vector2 windowPosition = uniWin.GetPosition(); // 現在のウィンドウ位置を取得 windowPosition += delta; // ウィンドウ位置に上下左右移動分を加える uniWin.SetPosition(windowPosition); // ウィンドウ位置を設定 } }
/// <summary> /// 最大化時以外なら、マウスドラッグによってウィンドウを移動 /// </summary> void DragMove() { if (uniWin == null) { return; } // ドラッグでの移動が無効化されていた場合 if (!enableDragMove) { isDragging = false; return; } //Debug.Log(Input.touchCount); // 最大化状態ならウィンドウ移動は行わないようにする bool isFullScreen = uniWin.IsMaximized; // フルスクリーンならウィンドウ移動は行わない #if !UNITY_EDITOR // エディタだと true になってしまうようなので、エディタ以外でのみ確認 if (Screen.fullScreen) { isFullScreen = true; } #endif if (isFullScreen) { isDragging = false; return; } // マウスによるドラッグ開始の判定 if (Input.GetMouseButtonDown(0) && !Input.GetMouseButton(1) && !Input.GetMouseButton(2)) { // EventSystemで反応した場合、UI上としてドラッグ対象外 if (!EventSystem.current.IsPointerOverGameObject()) { dragStartedPosition = Input.mousePosition; isDragging = true; wasUsingMouse = true; //Debug.Log("Start mouse dragging"); } } bool touching = (activeFingerId >= 0); int targetTouchIndex = -1; if (activeFingerId < 0) { // まだ追跡中の指が無かった場合、Beganとなるタッチがあればそれを追跡候補に挙げる for (int i = 0; i < Input.touchCount; i++) { if (Input.GetTouch(i).phase == TouchPhase.Began) { //Debug.Log("Touch began"); //targetTouchIndex = i; firstTouch = Input.GetTouch(i); // まだドラッグ開始とはせず、透過画素判定に回す。 break; } } } else { // 追跡中の指がある場合 for (int i = 0; i < Input.touchCount; i++) { if (activeFingerId == Input.GetTouch(i).fingerId) { targetTouchIndex = i; break; } } } // タッチによるドラッグ開始の判定 if (targetTouchIndex >= 0 && !isDragging) { dragStartedPosition = Input.GetTouch(targetTouchIndex).position; //activeFingerId = Input.GetTouch(targetTouchIndex).fingerId; isDragging = true; wasUsingMouse = false; //Debug.Log("Start touch dragging"); } // ドラッグ終了の判定 if (wasUsingMouse && !Input.GetMouseButton(0)) { //Debug.Log("End mouse dragging"); activeFingerId = -1; isDragging = false; } else if (!wasUsingMouse && targetTouchIndex < 0) { //if (touching) Debug.Log("End touch dragging"); activeFingerId = -1; isDragging = false; } // ドラッグ中ならば、ウィンドウ位置を更新 if (isDragging) { Vector2 mousePos; if (wasUsingMouse) { mousePos = Input.mousePosition; Vector2 delta = mousePos - dragStartedPosition; delta.y = -delta.y; // Y座標は反転 Vector2 windowPosition = uniWin.GetPosition(); // 現在のウィンドウ位置を取得 windowPosition += delta; // ウィンドウ位置に上下左右移動分を加える uniWin.SetPosition(windowPosition); // ウィンドウ位置を設定 } else { Touch touch = Input.GetTouch(targetTouchIndex); Vector2 delta = touch.position - dragStartedPosition; delta.y = -delta.y; // Y座標は反転 Vector2 windowPosition = uniWin.GetPosition(); // 現在のウィンドウ位置を取得 windowPosition += delta; // ウィンドウ位置に上下左右移動分を加える uniWin.SetPosition(windowPosition); // ウィンドウ位置を設定 } } }