Unityでウィンドウを透過させてデスクトップマスコットを作る話

このサイトでの初めての投稿になります。


今回はタイトルの通り、デスクトップマスコットを作っていこうと思います。

デスクトップマスコットというのは、PC画面上に常駐するキャラクターで、時間を教えてくれたり、ネット検索のお手伝いしてくれたりするカワイイ子のことです。


さくら荘のペットな彼女で「メイドちゃん」というキャラがでてきますが、ちょうどそんな感じですね。かわいい。


さてさて。それでは本題です。

僕のような素人が思いつくということはたいてい他の誰かが実践済みだったりするので、まずは事例があるか調べてみます。


Unityでデスクトップマスコットを作ろう

UnityChan sample (Window controller for Unity3

これ以外にもいくつか海外の記事がヒットしました。

有料アセットを使うのは貧乏学生にとってキビシイので、上記二件のソースを見ながら勉強して改造していきます。


DesktopMascotMakerの体験版のほうは、自分の環境が悪いのかビルドすることができませんでした(Editorだと動いてくれる)


WindowControllerのほうは殆どイメージ通りの挙動をしてくれました!

サンプルシーンを動かしてみるときゃわいいプロ生ちゃんがデスクトップに現れます。

控えめに言って神。


ですがこれも一つ問題があります。

ウィンドウ自体は透過してくれますが、マウス入力は反応してしまいます。

つまり、「透明に見えてるけどウィンドウ自体に当たり判定あるのでデスクトップの操作できねえ!」という状況ですね。


それを解決するために、レイヤードウィンドウという機能を使っていきます。

自分でwin32APIをたたきましょう。こちらのページを参考にさせていただきました。


SetLayeredWindowAttributesという機能で拡張ウィンドウを作ることができるようですね。

ここからまた調べていくと、stackOverflowでちょうどいいコードを見つけました。


これをうまいこと組み合わせてみましょう!


と思ったら今度はこのウィンドウでの一切のマウス操作を受け付けなくなりました。

キャラをつついてお話したりとかやりたいのでこれではダメです。


一晩調べた結果、

こちらのページに行きつきました。


僕自身正しく理解しているわけではありませんが、どうやら


SetWindowLong(hwnd, -20, 524288 | 32);

の部分を、

 SetWindowLong(handle, -20, 524288);


とすれば動いてくれるようです。



これで動かしてみると、透明部分はマウスをスルー(貫通)してくれるし、不透明部分はちゃんとクリックできるようになりました。

まあスクショじゃ伝わらないんですけどね。


今は他の人のソースをコピペして作っているので公開はできませんが、ちゃんと理解して書き直せたらgithubで公開しようと思っています。


次回の記事ではunityちゃんデスクトップマスコットを配布することを目標に!

橘の備忘録

電子工作したり、unityいじったり。 備忘録としてここにまとめます。

0コメント

  • 1000 / 1000