/// <summary> /// ウィンドウへのフォーカスが変化したときに呼ばれる /// </summary> /// <param name="focus"></param> private void OnApplicationFocus(bool focus) { if (focus) { // もしウィンドウハンドル取得に失敗していたら再取得 if (!uniWin.IsActive) { FindMyWindow(); } // アクティブウィンドウを監視して if (!isWindowChecked) { if (uniWin.CheckActiveWindow()) { isWindowChecked = true; // どうやら正しくウィンドウをつかめているよう } else { // ウィンドウが違っているようなので、もう一度アクティブウィンドウを取得 uniWin.Reset(); uniWin.Dispose(); uniWin = new UniWinApi(); FindMyWindow(); } } } }
// Use this for initialization void Awake() { if (!currentCamera) { // メインカメラを探す currentCamera = Camera.main; // もしメインカメラが見つからなければ、Findで探す if (!currentCamera) { currentCamera = FindObjectOfType <Camera>(); } } // カメラの元の背景を記憶 if (currentCamera) { originalCameraClearFlags = currentCamera.clearFlags; originalCameraBackground = currentCamera.backgroundColor; } // 描画色抽出用テクスチャ colorPickerTexture = new Texture2D(1, 1, TextureFormat.ARGB32, false); // ウィンドウ制御用のインスタンス作成 uniWin = new UniWinApi(); // 自分のウィンドウを取得 FindMyWindow(); }
/// <summary> /// 自分のウィンドウハンドルを見つける /// </summary> private void FindMyWindow() { // Unityプロジェクト名を取得 string title = UniWinApi.GetProjectName(); // まず自分のウィンドウタイトルで探す if (title != "" || !uniWin.FindHandleByTitle(title)) { // 名前がダメなら、今アクティブなウィンドウを取得 uniWin.FindHandle(); } }
/// <summary> /// 自分のウィンドウハンドルを見つける /// </summary> private void FindMyWindow() { // ウィンドウが確かではないとしておく isWindowChecked = false; // 現在このウィンドウがアクティブでなければ、取得はやめておく if (!Application.isFocused) { return; } // 今アクティブなウィンドウを取得 var window = UniWinApi.FindWindow(); if (window == null) { return; } if (Application.isEditor) { // Unityエディタと一致するかチェック // (別アプリのウィンドウは対象とさせない) if (window.ProcessName != "Unity") { return; } } else { // このUnityプロジェクトの名前と一致するかどうかをチェック // (別アプリのウィンドウは対象とさせない) if (window.Title != Application.productName) { return; } } // 見つかったウィンドウを利用開始 uniWin.SetWindow(window); // 初期状態を反映 SetTopmost(_isTopmost); SetMaximized(_isMaximized); SetMinimized(_isMinimized); SetTransparent(_isTransparent); if (_enableFileDrop) { BeginFileDrop(); } }
// Use this for initialization void Awake() { // カメラの元の背景を記憶 this.originalCameraClearFlags = Camera.main.clearFlags; this.originalCameraBackground = Camera.main.backgroundColor; // 描画色抽出用テクスチャ this.colorPickerTexture = new Texture2D(1, 1, TextureFormat.ARGB32, false); // ウィンドウ制御用のインスタンス作成 uniWin = new UniWinApi(); // 名前からウィンドウを取得 FindMyWindow(); }
/// <summary> /// 自分のウィンドウハンドルを見つける /// </summary> private void FindMyWindow() { // 今アクティブなウィンドウを取得 var window = UniWinApi.FindWindow(); if (window == null) { return; } // 見つかったウィンドウを利用開始 uniWin.SetWindow(window); // 初期状態を反映 SetTopmost(_isTopmost); SetMaximized(_isMaximized); SetMinimized(_isMinimized); SetTransparent(_isTransparent); if (_enableFileDrop) { BeginFileDrop(); } }
/// <summary> /// 最大化時以外なら、マウスドラッグによってウィンドウを移動 /// </summary> void DragMove() { // ドラッグでの移動が無効化されていた場合 if (!enableDragMove) { isDragging = false; return; } // 最大化時はウィンドウドラッグは行わない if (uniWin.IsMaximized) { 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); // ウィンドウ位置を設定 } }