kirurobo / UniWinApi

Windows API collection for Unity
192 stars 18 forks source link

Unity2019環境で背景の透過が正常に動作しない #16

Closed m-sigepon closed 5 years ago

m-sigepon commented 5 years ago

UniWinApiを使わせて頂いています。 素晴らしいアセットをありがとうございます。

本題ですが、Unity2019.1.3f1環境でUniWinApiを使用したところ背景透過を行っても黒背景の画面が出る状態で透過できない状態になってしまいます。 ウィンドウを最前面、透過時にタイトルバーを非表示するなどは動作しているようです。

2019環境で問題の方ご確認頂けると幸いです。

kirurobo commented 5 years ago

こちらこそ、デスクトップマスコット的なアプリは一定の需要がありそうなので出てくれば良いと思っていたところ、まじかる☆ですくとっぷ を作成いただき大変うれしく思います。

こちらで Unity 2019.1.1f1 で確認した際でも、背景透過ができなくなっていることは確認しました。 Unityの仕様変更によるかと思われますが、これに対応するのは難しそうだと困っているところです。

これまでのUnityでビルドしたものは対象のウィンドウを下記のどちらでも透過できていました。

(試験用としてこちらのアプリ作成してあります。)

しかしどうやらUnity 2019ではその両手法が使えず、描画結果を別のウィンドウに描きなおす、おそらく Desktop Mascot Maker で用いられるような方法でないと難しそうです。

Desktop Mascot Maker が新しいUnityに対応いただけると良いのですが、独自に同様のものを再現するとなるとそうすぐにはできそうになく、UniWinApi としては Unity 2019 での透過は非対応とせざるを得ないかと考えているところです。

m-sigepon commented 5 years ago

ご返答、ご確認ありがとうございます。 2019では、処理が変わって難しい感じですね。 とりあえず現状2018で開発したいと思います。 私の方でも解決法何か分かりましたら共有できればと思います。

kirurobo commented 5 years ago

ありがとうございます。

申し訳ありませんが今のところ対応の目途がたたないため、README で動作環境に Unity 2019 では背景透過ができない旨追記をさせていただき、こちらの issue はcloseとさせていただきます。

m-sigepon commented 5 years ago

自分の方で、TranspWndsというウィンドウ透過ツールで状態を確認してみました。 https://www.gigafree.net/utility/window/transpwnds.html 透過

ツールで、Unity2019でビルドされたアプリを透過設定にすると、UniWinApiで透過処理をオンにしてる場合ウィンドウが全体は透過されました。 ただし、キャラがアクティブになると透過処理をUnityが更新するのか不透過になります。 Unity2019では、ウィンドウがアクティブになると透過を上書きする処理が走ってるようです。 (内部的にどのようにしているのか分かりませんが) ただ、外部ツールで透過そのものは出来ているので非アクティブ時のみ透過とかはできるかもしれませんね。 一応、ご報告となります。

kirurobo commented 5 years ago

情報ありがとうございます。 確かにアクティブか非アクティブかで異なるという点は糸口になるかもしれません。 確実に対応できるか定かではありませんが、手段は探ってみたいと思います。

kirurobo commented 5 years ago

一旦クローズ後に度々失礼します。 前の話で、アクティブ時に透過を上書きしているのはおそらくUniWinApiの中で行われているものですね (^^;

TranspWndsのようにウィンドウ全体を半透明にすることは可能なのですが、背景だけ透過させるのはまた別なため、悩ましいです。

一方で、Unity 2019 でも「Project Settings」→「Player」→「Other Settings」にて、 「Auto Graphics API for Windows」を外し、下記のいずれかにしてビルドした場合は前のバージョン同様に透過ができることを確認しました。

ですが、DirectX11、DirectX12 が使えないと本来のパフォーマンスを出せなさそうですし、それで解決という訳ではないですね。

m-sigepon commented 5 years ago

検証の方ありがとうございます! 更新の方は、UniWinApiの処理でしたか DirectX以外透過できるのが歯痒いですね。

kirurobo commented 5 years ago

Unity2019 の DirectX でも解決しそうです!

https://forum.unity.com/threads/window-as-transparent-overlay-not-working-since-2018-3-0b12.593653/ にあるように、Unity 2019.1.7f1, 2019.2.0b6, 2019.3.0a2 以降であれば「Project Settings」→「Player」→「Resolution and Presentation」に「Use DXGI Flip Model...」のチェックボックスが付くようで、そのチェックを外すことで従来同様に透過できるそうです。 Unity 2019.3.0a5 で試したところ、いけました。

m-sigepon commented 5 years ago

追加検証ありがとうございます! 2019にバージョンあげれそうですね。 助かります!