Closed Rapilias closed 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;
}
概要