Rapilias / documents

Aqualit public documents
MIT License
10 stars 0 forks source link

モニター切り替え #556

Closed Rapilias closed 1 month ago

Rapilias commented 1 month ago

概要

Rapilias commented 1 month ago

抜粋

        public static async UniTask MoveDisplayAsync(int monitorIndex)
        {
#if UNITY_EDITOR
            return;
#endif

            if(DisplayHelper.Exists(monitorIndex) == false)
                return;

            var display = DisplayHelper.GetDisplay(monitorIndex);
            if(display.Equals(Screen.mainWindowDisplayInfo) == true)
                return;

            var centerPosition = new Vector2Int(0, 0);
            if(Screen.fullScreenMode != FullScreenMode.Windowed)
            {
                centerPosition.x += display.width / 2;
                centerPosition.y += display.height / 2;
            }
            else
            {
                // ウィンドウモードの場合は画面内に収める
                // 移動前モニターが移動先より大きい場合範囲外に出るので、移動先のサイズ-16で補正
                centerPosition.x = Math.Min(Math.Max(0, display.width - 16), Screen.mainWindowPosition.x);
                centerPosition.y = Math.Min(Math.Max(0, display.height - 16), Screen.mainWindowPosition.y);
            }
            // 一旦Windowedに戻してから移動
            var mode = Screen.fullScreenMode;
            Screen.fullScreenMode = FullScreenMode.Windowed;
            await Screen.MoveMainWindowTo(display, centerPosition);
            Screen.fullScreenMode = mode;
        }