キリンを召還するブログ。

Unity,OpenCVとRaspberryの事とか書くと思います。普段はiOSとかAndroidの枯れたアプリ技術を中心にやってます。なので、たまに失敗メモとして日常のハマった事とかも書きます。センサーも好きです。

【Unity】SkyBox(背景)を簡単に360度回転させる方法

ちょっと下記のようなScene背景を自動で動かさなくてはならない事がありました。
f:id:jkawasaki:20140301052418p:plain

Webでちょいちょい情報転がっているだろうと思って調べてみましたが、思ったよりも情報量少なくてしかもほとんどが海外のQA情報交換レベルだったので困った。
で、時間も無かったのでUnity Technologys Japanに技術問い合わせしたらUnityエバンジェリストの高橋さんが1日くらいでサンプル作成して返信くれた。優しぃ。

GitHub
https://github.com/keijiro/GalaxyBox

で、せっかくサンプルまで頂いたので
今回はこれを元に実際に回転させるやり方を説明します。

Scene上で背景を表示させるには「SkyBox」を使います。
最終的に回転させるのには標準Assets使わないのですが基本として覚えて貰った方が話が早いです。Standard Assetsにskyboxesというのがあるのでこれを使います。

Assetsに見当たらなかったら右クリック[import package]でインポートしてください。
f:id:jkawasaki:20140301035314p:plain

で、まずは空を出すのですがこれは簡単で、[Edit]➡[RenderSetting]を選択してInspectorのskyboxの設定を変えるだけです。
f:id:jkawasaki:20140301040649p:plainf:id:jkawasaki:20140301040700p:plain
さっきのSkyboxesをインポートしておけば選択画面で標準搭載のSunny1が選べるのでまずはそれを選択します。
※Skybox適用前
f:id:jkawasaki:20140301040729p:plain
※適用後
f:id:jkawasaki:20140301040756p:plain
背景が表示されました。これだけでも充分いきふん(雰囲気)でます。これがskyboxの力です。

で、回転させるとなると少し手順が変わります。

①必要なファイルをプロジェクトに格納
上記GitHubのコードから下記3点をAssetsに入れます。
・GalaxyBox.shader
・GalaxyBoxUpdater.cs
・RandomRotation.cs
shaderはshaderフォルダに、他2つはScriptに格納するとわかり易いです。

②背景imageの準備
背景にしたい画像をAssetsに放り込んでダブルクリックするとimageSettingが開かれます。
ここでは2048*2048の画像を使っています。まずは図のようにsettingを変更してみてください。
f:id:jkawasaki:20140301051940p:plain
変更すると画像アイコンがボックス型に変わります。
各種設定は色々意味があるのですが、今回に関してはこれがわかり易かっただけなので適宜変えてもらえればと。

②Materialにシェーダーを追加する
新規にマテリアルを作成して、そこに②の画像を適用します。そして①で追加した回転出来るシェーダに変えてあげます。[Shadet]->[Custom]からGalaxyBoxを選択してください。
f:id:jkawasaki:20140301043643p:plain
ちなみに今回紹介する方法、現状ではcubemap形式じゃないと背景は適用出来ないです。
skyboxである以上、boxのそれぞれの面にテクスチャ指定とかもやり方あると思いますが。

コンポーネントの追加
で、最後に適用したいオブジェクトにコンポーネントを追加してあげます。
今回は真ん中の玉(sphere)に2つのスクリプトを適用します。Updater.csの方にはまたマテリアル適用してあげないといけないのでご注意ください。

で動かすとこんな感じになります。
わかり易くplaneとsphereにはテクスチャを貼ってます。

画面全体が動く感じになるのでダイナミックさが増して良い感じ。
宇宙以外のリアルな使い道はいまの所思い浮かばないのですが。
いまはスクリプト上、ランダムで360度に動いていますが、ちょっと変えてあげればスピードも回転方向も自分でカスタム出来るかと。

こんな感じで簡単に回転出来ました。Unity Japanサポートのお陰ですが。
必要な方は是非お試しください。<告知>
UniteJapan2014にて「フィジカルコンピューティング分野におけるUnityの可能性」というタイトルで講演させてもらうことになりました。
http://japan.unity3d.com/unite/unite2014/schedule

なんでこれが必要だったかも含めたかも話す予定です。ぜひご覧ください。