{"id":14960511,"url":"https://github.com/kirurobo/uniwindowcontroller","last_synced_at":"2025-05-16T01:06:54.115Z","repository":{"id":37016552,"uuid":"302743423","full_name":"kirurobo/UniWindowController","owner":"kirurobo","description":"Makes your Unity window transparent and allows you to drop files","archived":false,"fork":false,"pushed_at":"2025-03-25T03:22:03.000Z","size":12257,"stargazers_count":469,"open_issues_count":8,"forks_count":61,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-05-16T01:06:48.176Z","etag":null,"topics":["drag-and-drop","file-dialog","macos","unity","unity3d-plugin","winapi","windows"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kirurobo.png","metadata":{"files":{"readme":"README-ja.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-10-09T20:11:07.000Z","updated_at":"2025-05-16T00:46:54.000Z","dependencies_parsed_at":"2024-01-11T14:09:49.033Z","dependency_job_id":"5a858e01-a07c-4b13-8a17-38b3c7eba87f","html_url":"https://github.com/kirurobo/UniWindowController","commit_stats":{"total_commits":239,"total_committers":2,"mean_commits":119.5,"dds":0.05439330543933052,"last_synced_commit":"9f284dba9465e67361614a537c2c39060579bd92"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kirurobo%2FUniWindowController","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kirurobo%2FUniWindowController/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kirurobo%2FUniWindowController/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kirurobo%2FUniWindowController/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kirurobo","download_url":"https://codeload.github.com/kirurobo/UniWindowController/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254448579,"owners_count":22072764,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["drag-and-drop","file-dialog","macos","unity","unity3d-plugin","winapi","windows"],"created_at":"2024-09-24T13:22:25.133Z","updated_at":"2025-05-16T01:06:49.102Z","avatar_url":"https://github.com/kirurobo.png","language":"C#","readme":"# UniWindowController\nUnified window controller for macOS and Windows  \n略称：UniWinC（ユニウィンク）\n\n[![license](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://github.com/kirurobo/UniWindowController/blob/master/LICENSE)\n\n### README\n- [Japanese (日本語での説明)](README-ja.md)\n- [English](README.md)\n\n\n\n## 概要\nUnity の Windows / macOS 向けビルドで、自ウィンドウの位置、サイズ、透過、枠非表示などをコントロールします。  \nまた、ファイル、フォルダのドロップも受け付け可能にできます。\n\nWindows、macOS それぞれではコード例やアセットが見つかりましたが、統一的に扱えるものが無さそうだったため作成しました。\n\n![uniwinc](https://user-images.githubusercontent.com/1019117/96070514-5284e580-0edb-11eb-8a4d-d990a0a028a8.gif)  \nhttps://twitter.com/i/status/1314440790945361920\n\n\n## デモ\n[Release のページ](https://github.com/kirurobo/UniWindowController/releases)  にビルドしたサンプルを置いてあります。\n\n\n## インストール\nUPMの方法ですと、バージョンアップもUPMから行えるようになります。\n\nA. Unity Package Manager (UPM) を利用する手順\n1. Unity エディタの [Window]メニューから [Package Manager] を開く\n2. [+] から [Add package from git URL...] を選択  \n    ![image](https://user-images.githubusercontent.com/1019117/234160406-f041bda9-262c-4d3f-b41c-45e11c3a94ce.png)\n3. https://github.com/kirurobo/UniWindowController.git#upm を入力して [Add] する  \n    ![image](https://user-images.githubusercontent.com/1019117/234160520-35447b67-dd44-4af6-9c7c-ab71577a4c17.png)\n\n\nB. UnityPackage を利用する手順\n1. [Release のページ](https://github.com/kirurobo/UniWindowController/releases) から .unitypackage ファイルをダウンロード\n2. Unity エディタでインポート\n\n\n## Unity プロジェクトでの利用\n1. Runtime/Prefabs にある `UniWindowController` プレハブをシーンに追加\n2. そこで配置された `UniWindowController` をインスペクターで確認\n  - Player Settings を適切に直す（緑のボタンでまとめて設定が変更されます）\n  - `IsTransparent` 等、設定をお好みに合わせる\n3. 左ドラッグでウィンドウ自体を動かしたい場合、 Runtime/Prefabs の `DragMoveCanvas` プレハブも追加\n  - 動作には EventSystem が必要です。もしシーンに無ければ UI → Event System を追加してください。\n4. PC / Mac スタンドアローンでビルドする\n5. ビルドしたものを起動\n\n\n## 制限事項\n- Unityエディタ上では透過はできません。ビルドをしてお試しください。\n  - 常に最前面やウィンドウ移動等は動作しますが、実行中にゲームビューを閉じたりドッキングの配置を変えることはお勧めしません。一応、ゲームビューにフォーカスを移すとウィンドウを再取得はします。\n- マウスでは良いのですが、タッチ操作には適切な対応がまだ定まっていません。\n  - Windows の場合、`TransparentType` を Alpha から ColorKey にすると、半透明の表現が失われる代わりにタッチ操作は自然になります。\n- 複数ウィンドウには対応していません。\n- 完全に動作検証ができている訳ではなく、不安定な動作もあるかもしれません。\n\n既知の問題については [Issues](https://github.com/kirurobo/UniWindowController/issues) もご覧ください。\n\n\n## 動作環境\n- Unity: 2019 4.31f1 or later\n  - Scripting Runtime: .NET 4.x or later\n- OS: Windows 10, Windows 11 or macOS\n\n開発は Unity 2020.4.30f1, Windows 11 / macOS 13.3 で行っています\n\n\n## 補足情報\n\n### ヒットテストについて\n正常にウィンドウを透過できると、あたかも長方形ではないウィンドウのように見えます。  \nですがそれは見た目だけで、実は長方形のウィンドウとして存在しています。  \nそこで、マウスカーソルの直下を見て、透明ならばマウス操作を下のウィンドウに受け流す（クリックスルー）状態とし、不透明なら通常に戻す、という\"ヒットテスト\"を常に行なうことで、\nあたかも見える部分しか存在しないように見せています。\n\nこのヒットテストについては2種類用意してあります。（自動ヒットテストを無効にして、自分で制御する、またはしないという選択も可能です。）\n\n| Name | Method | Note |\n|:-----|:-----|:------------|\n|Opacity|透明度を見る|見た目と一致して自然だが、処理が重い|\n|Raycast|Coliderを見る|より動作が軽いが、Coliderの用意が必要|\n\nRaycastの方法の方がパフォーマンス的に推奨ですが、Coliderを忘れると触れなくなるため、デフォルトでは Opacity としています。\n\nまた注意として、タッチ操作だとあらかじめ指の下の色を確認できないため、操作に違和感を感じると思います。  \nどのように対応すべきかベストの解決策が見つかっていないため、タッチ対応に関してはすみませんが後回しとなっています。\n\n\n### 透過方法について（Windowsのみ選択可）\nタッチ操作に対応する一つの方法として、layered window の単色透過を選択できるようにしてあります。  \nこれを選ぶと半透明が表現できず、パフォーマンスも落ちますが、ヒットテストをWindowsに任せるためタッチ操作に対しては感覚に一致するはずです。  \n\n| Name | Description | Note |\n|:-----|:-----|:------------|\n|Alpha|レンダリング結果の透明度を反映|こちらが標準|\n|ColorKey|RGBが一致する一色のみ透過|パフォーマンス悪いが、タッチは自然|\n\n\n### C# スクリプト\nUnityで他のスクリプトから操作できるものです。  \n仕様は固まってはいないため、変更される場合があります。\n\n#### UniWindowController.cs\n本体です。\n他のスクリプトから操作できるプロパティとして下記があります。（他にも追加されたりします。）\n| Name | Type | Description |\n|:-----|:-----|:------------|\n|isTransparent|bool| 透過（非矩形）ウィンドウに設定／解除します|\n|isTopmost    |bool| 常に最前面に設定／解除します|\n|isZoomed     |bool| 最大化／解除をします。また現在の状態を取得します |\n|isHitTestEnabled|bool| 自動ヒットテストを有効／無効にします。有効だとマウスカーソル位置により isClickThrough が自動で変化します。 |\n|isClickThrough|bool| クリックスルー状態に設定／解除します|\n|windowPosition|Vector2| ウインドウ位置を取得／設定できます。※メインモニタ左下が原点で上向き正の座標系で、ウィンドウ左下座標です |\n|windowSize|Vector2| ウインドウサイズを取得／設定できます |\n\n#### UniWindowMoveHandler.cs\nこのスクリプトをUI要素（Raycast Targetとなるもの）にアタッチしておくと、そのUI要素のドラッグでウィンドウを移動できるようになります。\n例えば「ここを掴んで移動できます」というハンドルの画像にアタッチする想定です。\n\nDragMoveCanvas というプレハブ内では、透明な全画面を覆うPanelを使っています。 \nこのとき Layer を「Ignore Raycast」にすることで、自動ヒットテストが Raycast の場合でも対象外となります。  \nこれにより画面のどこでもドラッグできるようになります。  \nただし他のUI上の操作はドラッグでの移動より優先されます。（DragMoveCanvas で Sort Order を小さくしているため。）\n\n#### LowLevel/FilePanel.cs\nファイル選択ダイアログを開く static メソッドがあります。  \nUniWindowController のインスタンスがなくても使えますが、その場合は呼んだ時点のウィンドウを親として開きます。\n- FilePanel.OpenFilePanel()\n  - ファイルを開く場合の選択ダイアログ。複数選択も可能。\n- FilePanel.SaveFilePanel()\n  - ファイルを保存する際の選択ダイアログ。\n\n\n### ソースのフォルダ構成\n利用するだけならば、Release にある unitypackage をダウンロードしていただけばよく、このリポジトリをクローンする必要はありません。  \nソースを見たい／ビルドしたい場合は、このようになっていますので参照ください。\n\n- UniWinC\n  - Unity のプロジェクトです。\n  - ビルド済みの DLL、bundle も既に含みます。\n  - ここの内容が unitypackage としてリリースにあります。\n- VisualStudio\n  - Windows版 x86, x64 の LibUniWinC.dll を生成するソリューションがあります。\n  - Release でビルドすると Unity フォルダ下の DLL が上書きされます。\n  - テスト用Windowsフォームアプリのプロジェクトも含まれます。\n- Xcode\n  - macOS版 LibUniWinC.bundle を生成するプロジェクトがあります。\n  - ビルドすると Unity フォルダ下の .bundle が上書きされます。\n\n\n## 謝辞\n- macOS側のコードは かりばぁ さんの [Unity + Mac + Swift で透過最前面ウィンドウを作る](https://qiita.com/KRiver1/items/9ecf65759cf1349f56af) をベースにさせていただきました。  \n- GitHub Actions での UPM ブランチ生成は hecomi さんの [Unity で .unitypackage で配布していたアセットを Package Manager 対応してみた](https://tips.hecomi.com/entry/2021/10/29/001304) を参考にしました。\n\nこの場を借りて感謝を申し上げます。\n\n\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkirurobo%2Funiwindowcontroller","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkirurobo%2Funiwindowcontroller","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkirurobo%2Funiwindowcontroller/lists"}