BLOG

魔法少女になるから花粉症治してほしい橘です。


前回の記事でウィンドウ透過させてデスクトップマスコットを作る話をしました。

せっかくなら何かしらの機能をつけてあげたいものです。


というわけで簡単にできそうな検索機能だけ実装します。

unityからブラウザを開くのはアホほど簡単なので五秒で実装できます。


Application.OpenURL("https://www.google.co.jp/search?q=" + userInput.text.Substring(0, userInput.text.IndexOf("を検索")));


これだけですね。簡単でございます。

今回は「unityを検索して」と入力すると「unity」だけ検索してくれます。

IndexOf()は指定のワードを見つけたひとつ前の文字数カウントを返してくれるのでこうやって実装することができます。

指定語句がないと-1が返ってくるので、いい感じに処理してあげてください。

動作の様子です。(このキャプチャの時は入力語句そのまま開いてる)


今の状態だと助詞との組み合わせを全パターン用意しておかなきゃいけないので、これから形態素解析APIに投げて帰ってきた名詞を検索かけるようにしていきましょう。

それは次回の記事で!

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


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

デスクトップマスコットというのは、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ちゃんデスクトップマスコットを配布することを目標に!