ラベル Unity の投稿を表示しています。 すべての投稿を表示
ラベル Unity の投稿を表示しています。 すべての投稿を表示

2014年11月22日土曜日

VR at 京大学園祭(NF)

京大の学園祭(NF)で、VR ( VirtualReality, 仮想現実 ) のゲームを展示しました!

前期に実験班が同じだった友達に誘われ、
ヘッドマウンドディスプレイ:Oculus Rift DK2
モーションセンサ:Kinect for Windows v2
を使ったゲームをUnityを使って作りました。

制作メンバーは6人で、当日はスタッフがカツカツでしたが、楽しかったです!

僕達の作ったゲームは
ゲーム内のキャラクターが実際と同じ動きをするので、自動で動くトロッコにのった人の気持ちになって、上下左右に現れるコインを腕を動かして獲得するゲームです。
右下がゲーム画面で、青いのが腕です。

チームでゲーム作るのも初めてで、いい経験でした。

この企画、一般のお客さんに多く体験していただき、とっても多くの衝撃与えられたのがとても嬉しかったです。初めてのVRは男女問わず、衝撃をうけていただき、やりがいを感じました。

発表に際し、1コンテンツではたりなそうだったため、外部の方にもきて発表していただきました。

一人はパノラマVRという、本当に世界旅行に行っているような気分を味わえるコンテンツを生業としている方でした。グランドキャニオンの崖の真上からの映像を全方位見られたりするのはVRならではで、面白いコンテンツでした。

一人は「ねこのるんば」という、ルンバの上にのった猫の気分を味わえるコンテンツでした。
酔います(笑)
でも一人称視点ですごく臨場感がありました。

またひとりは他大学の院生で、Oculus, Arduino, Leap Motion(指先の動きを認識するセンサ)をつかったコンテンツで、自分が魔法少女になって、画面上で左手に盾、右手に杖がでてきて、敵を倒すゲームです。

こちらのコンテンツは来週の同志社EVEでも展示される予定だそうです!

VRコンテンツはまだまだ少なく、アイデア勝負です!アイデア次第でどんどんいいものができそうだと、とても感じました。
いまのところあまり見かけない、センシングだけでなくアクチュエータも実装してみると面白そうだと思っています(ユニバのバック・トゥー・ザ・フューチャーはセンシングなどはないものの、アクチュエータ部分を十年ぐらい前に作ったのですから驚きです)

また人を驚かせるものを作りたいなあ

2014年11月20日木曜日

Unityでのプラグイン同士の衝突-"DllNotFoundException"

先日Unityを使っている際、今まで動いていたにも関わらず、あるプラグインを入れると"DllNotFoundException"が出るようになりました。

これが出るタイミングがとてもわかりにくく、プラグインをいれただけではしっかりと動くのに、保存して再起動した後から、エラーで動かなくなります。
そのため、原因を発見するのがかなり遅れました。


今回原因となったのは、OculusPluginです。
Unity->Assets->Plugins->
にインポートしたプラグイン(dll)が入っているのが普通です。

しかしよく見ると、
Unity->Assets->Plugins->
Unity->Assets->Plugins->x86_64
など複数同名のプラグインがありました。

調べてみると、UnityはPluginsの直下にdllが1つでもあると探索をやめてしまうようです。
すなわち、あるプラグインが直下にあって、その他のプラグインがたとえばx86_64の中などにあると、そのフォルダの中にあるdllが読み込まれなくなります。

解決法は、プラグインを直下に置かないことです。好きな名前のフォルダをつくり、直下にあるプラグインを入れてしまえばOKです。

その他のプラグインでも同様の症状は起こりうると思います。
参考にしてみてください。

2014年10月18日土曜日

Kinect for Windows v2 with Unity 〜導入編〜

前回の記事ではモデルデータとの同期についてとても軽く書きましたが、今回はもう少し戻った内容も含めて書きます。内容は一部重複しますが、2回に分けてご紹介したいと思います。

※後半も書こうとしたのですが、内容が前回の記事で紹介させていただいたブログとほぼ一致するため、公開をやめました。前回の記事をご参照ください。


※Kinect for Windows v2はv1とは異なり、Windowsの8以降にしか対応していません。Macや7以前のWindowsでの利用は基本的には不可能です。

Kinect for Windows v2はWindowsから開発のためのSDKがここで無料で頒布されています。もちろん経験があればそのまま利用したほうが効率のよいプログラムを記述できると思いますが、開発経験が少ないと、かなり難しいと思います。そこで便利なのがUnityです。

<Unityとは>
Unityはゲームエンジンであり、ゲームなどを作るときに非常に便利なアプリケーションです。例えば3Dゲームを作るとき、ソースコードを何も書かなくても、重力・摩擦・衝突など物理的なものや、非常に計算が難解な移動・姿勢の行列計算、またレンダリングなど、様々な処理を自動で行ってくれるようになります。これに移動プログラムなどだけを追加すれば十分ゲームになります。


2Dも3Dも作ることができます。また、作ったゲームをiOSやFlash、Windowsなど、様々な形式で出力することができます。

先ほどのリンクからたどると、ダウンロードできます。登録すればFree版は無料で利用できます(Kinectに必要なものを含む、一部プラグインが使えません)

Unityのインストールの仕方や初歩的な使い方については割愛し、既知のものとして以下の記事を記述します。

<Unity上でのKinect環境を整える>

まずKinectを利用するために、ここからKinect for Windows SDK 2.0 Public Previewをダウンロード&インストールします
そして同じサイトからもう一つ、”System Requirements”の+メニューから
上の図のピンクの部分、”Kinect for Windows SDK 2.0 Unity Pro Add-in”をダウンロードして、解凍しておきます。

準備は以上で完了です。

<Unity上でKinectを動かしてみる

何よりもまず、サンプルを使って動かしてみましょう。
先ほどダウンロード&展開したファイル内の¥¥KinectView¥¥MainScene.unityを開き、実行してみてください。kinectから出力された画像や距離データ、関節データを見ることができます。

エラーが出る場合、kinect周りの配線や”System Requirements”を満たしているかなど確認してみてください。

うまく表示されたでしょうか?

このサンプルプロジェクトにおいて、Scriptsフォルダの中身を見ると、
このようになっています。(Macなのはご愛嬌)

****Managerはkinectと通信をし、値を得るプログラムで、****Viewerはそのデータを表示するプログラムです。

自分で開発するときも、この****Managerのプログラムを利用すると便利です。

今回の記事はここまでで、次の記事でモデルデータへの対応について書きます。

2014年10月15日水曜日

Kinect for Windows v2 with Unity :モデルとの同期

さて、Kinect for Windows v2とUnityを利用して、3dモデル(今回はUnityちゃん)へのボーン対応が出来ましたので報告させていただきます。

2014年7月、Kinect for Windows v2がリリースされました。

もともとはXbox用のセンサーであったkinectも、PCでハックして使うユーザーが増え、kinect for Windowsが発売され、今回のKinect for Windows v2に至りました。

v1とv2の違いは、現状のネット上のドキュメントの量と、Windows 8以降にしか対応していない点です。(慣れてない人はv1を買ったほうが開発がしやすいかも?)ボーンが増えていますが、あまりわかりません。
Xbox用のkinectとkinect for windowsの違いは、最も大きいところは、商用利用できるかできないか、です。
購入される場合は、比較サイトなどでよく検討してからご購入ください。


さて、本題に戻ります。

こちらのサイトが大変参考になりました。
Unityを使ったキャラクターと人体の同期(前編)
Unityを使ったキャラクターと人体の同期(後編)

大体は上に貼らせていただいたリンクに書かれている通りにすればkinectからの出力通りに動かすことができます。ただしかなり違和感があり、その原因はつまり、ボーン設定がずれているためです。

以下のように設定してから実行してみてください。



いかがでしょうか?

WristとHandの両方にRightHandを割り当てていますが、Hand Rightの方は中指とかを設定した方がいいかもしれません。動かしてみた感覚では、プログラムそのままでは手首は対応していないように思いました(Wristすら回転していない)


Unity2Mikuを作った方はすごいですね。ほぼMicrosoft Kinect - Microsoft SDKで公開されているKinect Wrapper Package for Unity3Dと同じですが、Kinect v2用に書き換えられています。それをGithubに公開して頂いて、ありがたい限りです。


簡単に仕組みを説明すると、BodySourceManager(.cs)はkinectから身体のジョイント情報を読み出す関数が含まれるクラスです。これを利用すれば、自動的にジョイントの座標が吐き出されるため、これを利用してモデルに反映するプログラムがKinect2ModelControllerV2.csです。ここで、このデータはジョイントの座標そのものであるため、同じポーズであっても、kinectからの距離やその人の身長などによって大きく変わります。
それを補正するために使うのが回転です。ジョイント間のベクトルから向きを算出し、各ボーンがその向きを向くように回転させることにより、身体のモーションをモデルに反映しています。


踊ったりするととても楽しいですが、後ろを向くとやはりおかしくなります(仕方ないのか・・・)

綺麗に動かすコツは、離れることです。家では難しいですが、2~3m離れたほうがいいです。kinectのカメラを確認すると、全身写りきっていない場合など多いです!