Unity始めました。
※この記事はtkmh.me上で掲載している記事 (2016.03.06 掲載) を転載、加筆・修正したものです。
---------
Unity始めました。というわけで、一個Unityの特性を活かした何かを作りたいなと思ったので、作ってみました。
やったことは以下のとおり。
準備
・Blenderで六角柱の3Dモデルデータを作成
・Asset Storeから無料の宇宙のSkyBoxをダウンロード (反射用 描画はしない)
・SkyBoxを反射するようなマテリアルを用意し、六角柱に適用
・六角柱の上面が凹んで見えるような法線マップをPhotoshopで作成
・六角柱を複製し、規則的に配置
毎フレームごとの処理
・二値化したカメラ画像から1つの六角柱周りの平均色をざっくり取って、マテリアルに色を反映
・色によって六角柱のz座標を制御 (黒いものが若干奥に移動する)
・前フレームと現在のフレームの二値化画像を比較し、色の違うピクセル数がある閾値以上存在する場合
その位置から並んでいるものとは別の六角柱を出現
・出現した六角柱は回転しながら重力でしたに落ちていく
・出現した六角柱は出現した時間によって色が異なる
・マウスの位置によってカメラの角度が変わる
動体検知っぽいものをピクセルの比較によって実装してますが、このへんは精度が甘めなので
背景の動いていないところからも六角柱が出てきてしまいます。。
六角柱の法線マップは、Photoshopで作成しました。
並んでいる六角柱の紫っぽいところは、紫色を反映しているのではなく
宇宙のSkyBoxの色が反映されている形になっています。マテリアルの色としては白が設定されています。
Unityで楽だったのは以下の点。GUIでいろいろ出来てしまう。
・SkyBoxの設定
・マテリアルの作成
・マテリアルにSkyBoxの反射を適用
・3Dモデルデータの読み込み
逆にハマったところは、OpenCVの使用。
UnityでOpenCVを使用する方法はいくつかあるらしい。
1. Asset StoreでOpenCV for Unityを購入する ($95)
2. OpenCVSharpを使用する
3. C++からOpenCVを使用できるようにネイティブプラグインを作成する
1は高いので断念。何をケチってるんだと言われても仕方ないけどお金はかけたくなかった。
2はOpenCVをUnityのC#から直接使用できるんらしいんですが、Macだといろいろあってめんどくさい。
以下の記事を参考にして実際試してみましたが、うまくできませんでした。。
というわけでネイティブプラグイン実現。実行環境にがっつり依存してしまいますが。。以下の記事を参考にさせていただきました。
結果、最終的にUnityからビルドされるアプリは、OpenCVまわりが僕のPCと同じ環境じゃないと動きません。。でもとりあえず形にはなりました。
このところずっとUnityの勉強をしてましたが、感覚的にはFlash(Animate)に近いのかなぁと思いました。
ゲームエンジンなので、当たり判定や物理演算など、わりと簡単に使えるようになっていて便利。
ただ、いろいろな都合を考えると、Unity開発はWindowsだなと思いました。もうちょっとUnityの知識を深めていきたいです。