/// <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);            // ウィンドウ位置を設定
            }
        }
Esempio n. 2
0
        /// <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);            // ウィンドウ位置を設定
                }
            }
        }