Ejemplo n.º 1
0
    private void GetInput()
    {
        // for Touch
        if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer)
        {
            if (Input.touchCount == 2)
            {
                // カメラ操作のロック
                if (flyThroughCamera != null)
                {
                    flyThroughCamera.LockInput(this.gameObject);
                }
                if (orbitCamera != null)
                {
                    orbitCamera.LockInput(this.gameObject);
                }

                // 連携コンポーネントをOFF
                foreach (MonoBehaviour component in disableComponents)
                {
                    if (component != null)
                    {
                        component.enabled = false;
                    }
                }

                // ピンチセンターを設定
                pinchCenter = (Input.GetTouch(0).position + Input.GetTouch(1).position) / 2.0f;

                // ピンチ距離を計算
                currentDistance = Vector3.Distance(Input.GetTouch(0).position, Input.GetTouch(1).position);

                if (isFirstTouch)
                {
                    // ピンチセンターへのズーム開始
                    if (zoomToPinchCenterFor2D)
                    {
                        StartZoomToPinchCenter();
                    }

                    oldDistance  = currentDistance;
                    isFirstTouch = false;
                    return;
                }

                calcZoom    = currentDistance - oldDistance;
                oldDistance = currentDistance;
            }
            else
            {
                ResetInput();
            }
        }

#if UNITY_STANDALONE_WIN
        else if (Application.platform == RuntimePlatform.WindowsPlayer && winTouch)
        {
            if (TouchScript.TouchManager.Instance.NumberOfTouches == 2)
            {
                // カメラ操作のロック
                if (flyThroughCamera != null)
                {
                    flyThroughCamera.LockInput(this.gameObject);
                }
                if (orbitCamera != null)
                {
                    orbitCamera.LockInput(this.gameObject);
                }

                // 連携コンポーネントをOFF
                foreach (MonoBehaviour component in disableComponents)
                {
                    if (component != null)
                    {
                        component.enabled = false;
                    }
                }

                // ピンチセンターを設定
                pinchCenter = (
                    TouchScript.TouchManager.Instance.ActiveTouches[0].Position + TouchScript.TouchManager.Instance.ActiveTouches[1].Position) / 2.0f;

                // ピンチ距離を計算
                currentDistance = Vector3.Distance(
                    TouchScript.TouchManager.Instance.ActiveTouches[0].Position,
                    TouchScript.TouchManager.Instance.ActiveTouches[1].Position);

                if (isFirstTouch)
                {
                    // ピンチセンターへのズーム開始
                    if (zoomToPinchCenterFor2D)
                    {
                        StartZoomToPinchCenter();
                    }

                    oldDistance  = currentDistance;
                    isFirstTouch = false;
                    return;
                }

                calcZoom    = currentDistance - oldDistance;
                oldDistance = currentDistance;
            }
            else
            {
                ResetInput();
            }
        }
#endif

        // for Mouse
        else
        {
            if ((Input.GetMouseButton(0) && (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt))) ||
                Input.mouseScrollDelta.y != 0.0f)
            {
                // カメラ操作のロック
                if (flyThroughCamera != null)
                {
                    flyThroughCamera.LockInput(this.gameObject);
                }
                if (orbitCamera != null)
                {
                    orbitCamera.LockInput(this.gameObject);
                }

                // 連携コンポーネントをOFF
                foreach (MonoBehaviour component in disableComponents)
                {
                    if (component != null)
                    {
                        component.enabled = false;
                    }
                }

                if (Input.mouseScrollDelta.y == 0.0f)
                {
                    // ドラッグでの操作

                    // ピンチセンターを設定
                    if (isFirstTouch)
                    {
                        pinchCenter = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
                    }

                    // ピンチ距離を計算
                    Vector2 orgPoint    = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
                    Vector2 diff        = orgPoint - pinchCenter;
                    Vector2 mirrorPoint = new Vector2(
                        (diff.x * Mathf.Cos(180 * Mathf.Deg2Rad)) - (diff.y * Mathf.Sin(180 * Mathf.Deg2Rad)),
                        (diff.x * Mathf.Sin(180 * Mathf.Deg2Rad)) + (diff.y * Mathf.Cos(180 * Mathf.Deg2Rad))
                        );
                    currentDistance = Vector3.Distance(orgPoint, mirrorPoint);

                    if (isFirstTouch)
                    {
                        // ピンチセンターへのズーム開始
                        if (zoomToPinchCenterFor2D)
                        {
                            StartZoomToPinchCenter();
                        }

                        oldDistance  = currentDistance;
                        isFirstTouch = false;
                        return;
                    }

                    calcZoom    = currentDistance - oldDistance;
                    oldDistance = currentDistance;
                }
                else
                {
                    // ホイールでの操作
                    calcZoom = Input.mouseScrollDelta.y * ratioForWheel;
                }
            }
            else
            {
                ResetInput();
            }
        }
    }
Ejemplo n.º 2
0
    private void GetInput()
    {
        // for Touch
        if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer)
        {
            if (Input.touchCount >= grabTouchNum)
            {
                // カメラ操作のロック
                if (flyThroughCamera != null)
                {
                    flyThroughCamera.LockInput(this.gameObject);
                }
                if (pinchZoomCamera != null)
                {
                    pinchZoomCamera.LockInput(this.gameObject);
                }
                if (orbitCamera != null)
                {
                    orbitCamera.LockInput(this.gameObject);
                }

                // コンポーネントをOFF
                foreach (MonoBehaviour component in disableComponents)
                {
                    if (component != null)
                    {
                        component.enabled = false;
                    }
                }

                // ドラッグ量を計算
                float   touchesPosX          = (Input.GetTouch(0).position.x + Input.GetTouch(1).position.x + Input.GetTouch(2).position.x) / 3.0f;
                float   touchesPosY          = (Input.GetTouch(0).position.y + Input.GetTouch(1).position.y + Input.GetTouch(2).position.y) / 3.0f;
                Vector3 currentWorldTouchPos = renderCamera.ScreenToWorldPoint(new Vector3(touchesPosX, touchesPosY, 1000.0f));

                if (isFirstTouch)
                {
                    oldWorldTouchPos = currentWorldTouchPos;
                    isFirstTouch     = false;
                    return;
                }

                dragDelta        = currentWorldTouchPos - oldWorldTouchPos;
                oldWorldTouchPos = currentWorldTouchPos;
            }
            else
            {
                ResetInput();
            }
        }

#if UNITY_STANDALONE_WIN
        else if (Application.platform == RuntimePlatform.WindowsPlayer && winTouch)
        {
            if (TouchScript.TouchManager.Instance.NumberOfTouches >= grabTouchNum)
            {
                // カメラ操作のロック
                if (flyThroughCamera != null)
                {
                    flyThroughCamera.LockInput(this.gameObject);
                }
                if (pinchZoomCamera != null)
                {
                    pinchZoomCamera.LockInput(this.gameObject);
                }
                if (orbitCamera != null)
                {
                    orbitCamera.LockInput(this.gameObject);
                }

                // コンポーネントをOFF
                foreach (MonoBehaviour component in disableComponents)
                {
                    if (component != null)
                    {
                        component.enabled = false;
                    }
                }

                // ドラッグ量を計算
                TouchScript.TouchPoint tp0   = TouchScript.TouchManager.Instance.ActiveTouches[0];
                TouchScript.TouchPoint tp1   = TouchScript.TouchManager.Instance.ActiveTouches[1];
                TouchScript.TouchPoint tp2   = TouchScript.TouchManager.Instance.ActiveTouches[2];
                float   touchesPosX          = (tp0.Position.x + tp1.Position.x + tp2.Position.x) / 3.0f;
                float   touchesPosY          = (tp0.Position.y + tp1.Position.y + tp2.Position.y) / 3.0f;
                Vector3 currentWorldTouchPos = renderCamera.ScreenToWorldPoint(new Vector3(touchesPosX, touchesPosY, 1000.0f));

                if (isFirstTouch)
                {
                    oldWorldTouchPos = currentWorldTouchPos;
                    isFirstTouch     = false;
                    return;
                }

                dragDelta        = currentWorldTouchPos - oldWorldTouchPos;
                oldWorldTouchPos = currentWorldTouchPos;
            }
            else
            {
                ResetInput();
            }
        }
#endif

        // for Mouse
        else
        {
            if (Input.GetMouseButton(0) &&
                (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt)) &&
                (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)))
            {
                // カメラ操作のロック
                if (flyThroughCamera != null)
                {
                    flyThroughCamera.LockInput(this.gameObject);
                }
                if (pinchZoomCamera != null)
                {
                    pinchZoomCamera.LockInput(this.gameObject);
                }
                if (orbitCamera != null)
                {
                    orbitCamera.LockInput(this.gameObject);
                }

                // コンポーネントをOFF
                foreach (MonoBehaviour component in disableComponents)
                {
                    if (component != null)
                    {
                        component.enabled = false;
                    }
                }

                // ドラッグ量を計算
                Vector3 currentWorldTouchPos = renderCamera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 1000.0f));

                if (isFirstTouch)
                {
                    oldWorldTouchPos = currentWorldTouchPos;
                    isFirstTouch     = false;
                    return;
                }

                dragDelta        = currentWorldTouchPos - oldWorldTouchPos;
                oldWorldTouchPos = currentWorldTouchPos;
            }
            else
            {
                ResetInput();
            }
        }
    }