遊んで航海記

思いつきで遊んだり、ゲームを作ったり、寝たり

Oculus TouchでUnityちゃんの指を動かして遊ぼう

Oculus Touchが届いてヒャッハーしている今日この頃です。アバター衣装とかあきらかにモヒカンキャラいますよね。開発でも、もっとヒャッハーしたいですね。

えーと、じゃなくって、この記事はOculus Advent Calendar 2016、12/19の記事です。

qiita.com

前日は、きゅーこんさんの「OculusStoreでの配布方法」でした。こういう実録情報は本当ありがたいです。一歩踏み出せそうな気がしますよね。

今日は、Oculus TouchでUnityちゃんの指を動かせるスクリプトを作って共有します!

f:id:n_ryota:20161218041816p:plain

スクリプトの処理は、指だけなのでご注意を。手や足、全身のIKなどは各自Unity標準IKやFinal IKのVRIKを使うなどで対処してみてください。

君の指は。自作に至る流れ

さて、Oculus Touchは位置や姿勢のトラッキングができるのが嬉しい他に、ボタンやアナログスティックがついたコントローラーでありながら、いくつかのボタンやトリガーには近接センサーを装備していて、なんとなく手っぽい感じで操作できます。

そうするとこういうこと考えちゃうわけですよ。

Oculusのアバターじゃなくて、好きなMechanimなキャラクターの指を動かしたい

あとアニメーションのブレンドとかじゃなくて、プログラムから自由に動かしたい!

で、自作してみることにしました。TポーズのUnityちゃんの指の姿勢や構造を見ていたら、わりとシンプルだったので。

結果 ~連動して動く指~

やってみると……あまりトラブルなく意外と簡単にできました。Avator SDKのコードも一切見ずに書いたので標準的な感じではないですが。VR Walk & RunのUnityちゃんに反映したら、こんな感じです。

はい。結構それっぽく動きますよね。

ちなみにピースは中指側のトリガーをゆるめるという、だいぶテクニカルな操作をするとできます:D

もちろん、拳を握ったり、手を開いたり、人差し指で指さして方向を示したり、カメラマンジェスチャーしたり、親指を立ててグッジョブしたり、OKサインしたりもできます。

さらに、ナチュラルに中指を立てるようなポーズもできてしまっていたのですが、それを防ぐ設定もいれておきました(デスメタルな雰囲気のVRを作るときは設定改変を……?)。

Touchのボタン状態取得などは、こりんさんのWebに超わかりやすくまとまっていて、助かりました(ありがとうございます!)。

framesynthesis.jp

スクリプトの内容と設定方法

指を動かす処理としては、UnityChanの各指の根本にスクリプトをはりつけ、回転軸を設定して、ボタンの状態にあわせて回転させる感じです。

指先にむけて曲がり方の係数なども設定できます。

各値の設定方法を解説しようと思ったのですが、その記事を書く方が面倒……! なので、スクリプトを貼り付けるだけで指の名前を見て全自動で設定するようにしました。

Thumb、Index、Middle、Ring、Pinckyといった親指、人差し指、中指、薬指、小指に対応する名前がついているGameObjectにスクリプトを貼り付けて、FingerTypeがAUTOになっていればOKです。

f:id:n_ryota:20161218041159j:plain

このスクリーンショットは左手の5本に設定した図です。設定というか単にスクリプトを各指の根本のGameObjectに貼り付けるだけ。右手も同様に貼り付けましょう。

自動設定する値についてはUnityちゃん用に調整した値なので、他キャラで調整する場合は、コンポーネントメニューからAutomatic Setupしたあと、各値を調整してみてください。またはソースコードのSetupFingerType()の中身を調整するのでもよいです。

MMDキャラはY方向ではなくZ方向を軸にしたFinger Angleにすると調整しやすいかも?(ほぼ未確認ですが)

シーンに読み込んだキャラクターの初期ポーズは、Tポーズなど指先を伸ばしたポーズにしておいてください。この初期ポーズを手が開いた状態として、そこからスクリプトで曲げる感じになっています。

雑然としてますが、スクリプトはこちらです。パラメータの意味についてもToolTipやコメントを入れておきました。

ボタン入力の判定にOVRInputを使うので、Oculus Utilities for Unity 5を別途インポートして、OVRManagerコンポーネントを1つカメラなどに付けておいてください。

続きを読む

Unicessingで遊ぼう! ProcessingのコードをUnityに移植するの巻

 前回下記の記事で予告した通り、この記事では、UnityでProcessingみたいに手軽に図形を描いたりできるアセットUnicessingを使って、Processingのコードを動かすコツをお伝えしようと思います!

eyln.hatenablog.com

 移植したサンプルプログラムの動作例はこちら。

Processingと同じ座標系に

 Unicessingは、Unityに馴染ませるため、Unity座標系をそのまま使うのを基本にしています。

 ただProcessingのコードを移植して参考にしたいときなどには、Processingの座標系(Y軸で上がマイナス、下がプラス、Z軸で奥がマイナス、手前がプラス)を使えた方が便利ですよね!

 なので Ver.0.14 から size(640, 480, P2D, 0.01f) などと書くことで、Processingの座標系モード(通称P5モード)になるという、実験的機能を入れてみました。

 width、heightを参照すると、size()で指定した640、480の値が返ってきます。GameObjectの中心がwidth、heightの画面の中央になるようになるようにしました。また、Unityの空間では1.0fが通常1mの大きさのため、そのまま使うと大きすぎなので、実際の表示物には0.01fのスケールを掛けるようにしています。

 P5モードでは、テクスチャの方向についてもV方向を逆転するようにして、正しく描画できるようにしました。rect()の基準点も左上になります(デフォルトのユニティモード(U3D)では左下が基準点)。

 あと Ver.0.15 で ellipse() の大きさバグなどもいくつか修正しました。※Ver.0.15については記事の最後に案内があります。

 ちなみにsize()でP2D、P3Dどちらを指定しても3D座標が使えますが、P2Dを使うとnoLights()を自動設定してライティングしないモードでスタートします。

 さて前置きが長くなりました。実際にいくつかコードを移植してみましょう! 最後に移植済みサンプルをまとめたunitypackageもあります(要Unicessing)。

Tree

 Processing標準サンプルのTopics/Fractals and L-Systems/Treeを移植します。

f:id:n_ryota:20161213231905p:plain

 移植元のTree.pdeのコードはこちら。

続きを読む

Unityで手軽にProcessingっぽく図形を描いて遊べるアセット Unicessing を作ったの巻

Unityで手軽にProcessingっぽく図形を描いて遊べるアセットとしてUnicessingというものを作りました。

f:id:n_ryota:20161204225239p:plain

ProcessingやりたきゃProcessingやればいいじゃん、と思うかもですが、UnityならProcessingだけで作るよりも簡単に画面エフェクトをかけられたり、3Dキャラと組み合わせて動かしたり、最新のVR HMDに対応したりするのが楽なので。あとUnityなのにProcessing的にさささっとプロトタイピングする変態感を味わえます(使う用途には各自ご注意ください)。

α版を見た皆さまの感想

もともと個人的な趣味のような形で作っていたものなのですが、ちょっとしたものを軽く試すには結構面白いかも、と思ってJapan VR Fest.にてα版を公開したところ、さすがVR界隈の方というか、何事も手が速いノリよく遊んでいただいたり、コメントもいただけまして…

※他にもコメントや修正のアドバイスなどいろいろいただけました! ありがたや

Unicessing正式リリース

そして、つい最近正式版としてリリースできました。みなさまありがとうございます! 下に紹介動画もありますので、ひとまずどうぞ。

Unity Asset Store で Unicessing を見る


α版との主な違いは、README_jp.txtの更新履歴にありますが、概要としてはこんな感じです。

  • stroke()でrect()、ellipse()のエッジや、box()、sphere()、mesh()のワイヤーフレームを描ける、noStroke()で線を描かなくできる
  • noFill()で塗りつぶしをOFFにできる
  • rectMode()、ellipseMode()、imageMode()で矩形、円、画像の基準点を変えられる
  • USubGraphicsを使ったときの処理が速くなった
  • 迷路作成してカーソルキーで進めるMazeサンプルを追加
  • キャラを操作してランニングアクションができるRunnerサンプルを追加

Mazeサンプルはこれで、

Runnerはこれです。

このあたり、ノリで作ってる感丸出しであります。

あとオンラインから画像読み込んで並べるフライングカタログというサンプルも作ったのですが、 Amazonの画像を直接参照していたので、ひとまずカットしております。無念。

それと……

サンプル実行前にインポートしてほしいパッケージ

ストアの申請時に「AssetStoreのパッケージにはStandardAssetsを直接含めないでインポート手順を指示するだけにして」といった趣旨のリテイクがあったので、サンプルを確認する場合はお手数ですが下記のパッケージを手動でインポートしておいてください。

1. シネマティックイメージエフェクト

上記アセットをAsset Storeから入手してください。 カメラのImageEffectとしてBloomとTonemappingColorGradingだけを使用しています。

※Unityも5.5もリリースされましたし、今後はPostProcessingStackを使うのも良さそうですね。

2. Third Person Character(Ethan)

Runnnerサンプルでキャラクターとして使用しています。 Unityのメニューから Assets -> Import Package -> Character を選び Third Person Characterにチェックを入れてImportしてください。

Processingについて

Processingというのは、もともとMITのメディアラボで作られたビジュアルデザイン、アート系のコードをシンプルに書けるプログラミング言語で、教育やメディアアート、プロトタイピングなどの分野でよく使われたりしています。最近はp5.jsというJavaScriptライブラリとしても似たコードを動かせます。

現代のBASICというか、line(0, 0, 100, 100)と書くだけで線を描けるという単純明快さがとてもシンプルでよいと思っています。

ドットインストールにProcessing入門があったり、P5 Code Schoolというサイトにまとまった解説があったり、東京工科大学の資料もよい感じです。応用的なデモはFladdictさんのサイトなど気持ち良いです。

私自身も、Processingに関する本を(あまりProcessingらしくない使い方で)2冊書いているくらい、大好きなプログラミング言語です。

遊んで学ぶ はじめてのプログラミング ~Processingの魔法学校~

f:id:n_ryota:20161204215855p:plain

↑の本のヘルプやチートシートをオンラインでも公開中なので、それも参考になるかもです。 書籍自体は、プログラムを魔法にみたてて、はじめてのところからお絵かきツールやアクションゲームを作るところまで、キャラクターたちと一緒に遊んで学ぶ、みたいな感じで解説しています。

遊んで作るスマホゲームプログラミング for Android

f:id:n_ryota:20161204215905p:plain

↑の本はゲーム作りに特化してるので、プログラミングだけでなく、企画のアイデアづくりから解説してたりします。あとfor Androidとか書いてるのに、Androidネイティブ版以外にもHTML5iOS/Android両方動かしてるサンプルも結構あったり、Kinect使ったものがあったり、ハチャメチャです。

そういえば、本とは別に、自分のWebで動かしているちょっとしたデモなどもあります。Processing.jsというJavaScriptライブラリ(を自分で高速化したやつ)を使ったソースも見れます。

※ただし、UnicessingはProcessingとの互換性を維持するよりも、Unity上での使い勝手を重視して作っています。座標系などもUnity準拠ですし、独自拡張もいろいろあります。

※よりProcessingとの互換性を意識したAssetはuProcessingとしてGitHubで公開しています(描画の仕組みが異なるため、Unicessingよりは遅いのと、他と組み合わせた使い方をしにくいのと、最近さわってないので機能実装度合に差があったりはします。でも無償!)。

次回予告?

とはいえ、

という意見をいただいてナルホド! と思いましたので、次回ブログ記事でそのあたりのコツを書く予定です!(今回じゃなくてごめんなさい!)

Advent Calendar

そして、この記事はProcessing Advent Calendar 2016の12/4の記事でもあります。毎年面白い投稿があって完走してるのですが、今年は場所も移って常連さんの参加が少ないので、軽い気持ちで参戦していただけると嬉しいです。Unicessingもありだと思います!! ヘルプ…

qiita.com

Japan VR Festで登壇&刺激的な話を聞いたり、DCExpoで未来技術を体験した話

10/29 日本科学未来館にVR開発者が集ってしゃべる Japan VR Fest(旧オキュフェス)にお邪魔し、登壇してきました。

f:id:n_ryota:20161103022225p:plain

この記事では、登壇準備の裏話や、まとめリンク、デジタルコンテンツエキスポの感想などもあわせてメモしておきます。

準備:実験したり、スライドを用意したり

VR Walk & Runはユニティちゃんになって(憑依して)、その場の足ぶみで歩いたり走ったり魔法を使ったりできるゲームです。

憑依する体験について

憑依する体験って 、いろんな可能性があると思うんですよね。

VR空間で自分の身体として動くボディを見たいという気持ちは、20年前の体験に遡ります。

NPCのいのち

しかし、それとは別に、NPC(囚われているもうひとりのユニティちゃん)の動きにも生き生きとしたものがだせればな、と思って少し前から実験をしていました。

また、VRのキャラクターでモーション再生っぽさを減らすにはどうしたらいいかなと思い、実際に人を観察して、プログラム生成でゆらぎをいれたらどうかなと実験したのが下記のもの。

続きを読む

100人がユニティちゃんになった日 VR Walk & Run、Unity VR EXPO出展記

2016年7月17日Unity VR EXPOというVRコンテツの展示会があったのですが、そこに出展したときのアレコレをTwitterからまとめてみました。VRの開発や展示、イベントに行くひとの参考に多少はなるかも。

events.unity3d.jp

イベントのデモリールはこちら。

VR Walk & Runという謎の名称ですが、ユニティちゃんになってVR世界を歩いたり、走ったり、囚われているもうひとりのユニティちゃんを助けたりするコンテンツです。Oculus RiftLeap Motionを使っています。

f:id:n_ryota:20160930005358j:plain

※開発時の話を知りたい方は以前の記事へどうぞ。

eyln.hatenablog.com

イベント前日の設営。秋葉原の会場へ

まず機材をどうするかですが、ハンドキャリーしました。

スーツケースに入るようなPCとして最初から考えて買ってたので、なんとか収まってます。

HMDつけて足ぶみするのは目隠しして足ぶみするようなもの。自宅では使ってないけど、イベントでは安全のため子供用のボールプールを持っていって、囲いにしました。素足で入れば、足の感覚で位置のズレがわかります。(これはアプリ側でHTC Viveみたいに危険ゾーンに近づいたらHMD側にガイドを表示するのでもよいかも)

機材トラブルも少し。もしかしたらという覚悟はあったのですが、ワイヤレスマウスなどの無線系はこういうところだと調子が悪いので、有線マウス&キーボードを現地調達しました。さすが秋葉原

あと、LeapMotionが反応しなくてPC再起動で直ったり、現地でオブジェクト追加したり、キャリブレーションで困ったり、素足でも歩きやすくするためマットひいたり…いろいろ調整。

準備については、昔アーケードゲームの展示などを仕事でしてたことあるんですが、個人でVRのイベントに出展するのははじめてだったので、次の記事をかなり参考にさせていただきました。

qiita.com

イベント当日

当日は会場の外でもけっこう並んでる方がいて、開始と同時にたくさんのひとが。

続きを読む

7/17 Unity VR EXPO AKIBAにVR Walk & Run出展決定

Oculus Rift CV1(製品版)が届いてすぐ↓のようなことをやっていて

eyln.hatenablog.com

ちょうどよくイベントがあったので応募しつつ、こういうことをやってたりしたのですが…

そうしているうちに、Unity社から連絡があり、出展が決まりました! (ブログでは告知してなかったのでいまさら告知)

※でも商用コンテンツ扱いになりそうだったので、今回おきゅらすたんは登場しません。無念。

※今回はハロウィンコスチュームのUnityちゃんになれます。

でも、応募時点でよい名前を思いつかなくて、なし崩し的にVR Walk & Runのまま行くことにしましたよ。

いやぁ、検索しづらいですよね、これ。(その後、ありがたいことに名前を提案してくださった方もいて、それも踏まえて別名考えようと思っていたら、それよりいろいろ開発しないと出せないぞ、となって、そのまま)

当日はこのコンテンツDLカードのもの(7/11 Ver)をよりも少し発展したバージョンを展示予定です。(コンテンツDLカードの方も差し替えできるようなら差し替えするかも)