ゆさゆさ早苗さんVR・その2
Oculusのセンサーが不安定でこれは壊れたかな?と思ってフテくされてたのですが、USB HUBを交換したら問題が解消したので再開です。
Oculusを購入したのは去年の1月頃でした。
その頃はUnityでOculus対応のプログラムを作成するためにはUnityのProライセンスが必要だったので、4カ月の試用ライセンスが切れてから触っていなかったのですが、今は無料のStandard版でも作れるようになっているのを知り、再びいじりりはじめています。
とりあえず、早苗さんを自分の部屋に呼んでイロイロしたいなというソフトを書いてみています。ほぼ紙芝居プログラムとはいえ、こういったリアルタイム処理は書いたことが無いので作法が判らず壁に突き当たることばかりです。知り合いにゲームプログラマでも居れば良いのですけどね。
とりあえず組みはじめて、何が必要になりそうかを洗い出していきます。
1.HSWD待機処理
Oculus の SDKを最新にすると、以前にはなかったこんな警告メッセージが画面に表示されるようになっていました。
プログラムのことはお構いなしに画面にオーバーラップ表示されるので、起動直後に演出があるようなプログラムだと困ってしまいます。
仕方が無いので、警告が表示されている間は待機する処理を入れることにしました。急いでいる時には面倒ですよね!
2.フェードインフェードアウト処理
警告メッセージが終わったらBGMと同時に画面をフェードインさせます。
この画面フェードイン処理、以前は2DのTextureを画面いっぱいに表示し、それをだんだんと透明度を上げることで実現できていたと思ったのですが、久々にその処理を使って見ると使えなくなっています。
仕方が無いので、カメラを黒い箱で覆い隠して、その箱の透明度を上げることで実現する事にします。これも実は問題ありなのですが、あまりこだわっても仕方が無いので。
Canvas用とBGM用のフェードインフェードアウト処理を別に用意しましたが、汎用的なコンポーネントとして作成できるかもしれません。要検討です。
タイトルロゴはてきとう。本当はカメラにオーバーラップさせたかったのですが、どうもOculusでは実現するのはちょっと面倒なようなので、カメラの前にタイトルのオブジェクトを浮かべるだけに留めています。
3.シーン管理
そして何かキーを押すとタイトルはフェードアウトし、画面の外から早苗さんが飛び込んできます。
Oculusを被ってテストしてると、判っているのにビクッとしてしまいます。
ここからメニューセレクトと位置調整モードに入りますが、タイトル画面からの流れを制御する仕組みが難しいですね。
今はシーン管理用のスクリプトを用意して状態遷移を書いていますが、状態遷移が複雑になると管理が破たんしそうです。このあたり、一般的にはどうしているんでしょうかね。参考になる文献とかあるとよいのですが。
4.カメラ移動
早苗さんと見つめ合いながら、自分の頭の位置にカメラが来るようにキーボード操作で調整できるようにします。標準の移動処理はゲーム用の移動処理なので、別途移動処理を書き起こしています。
しかし、ここでキーの定義に悩み中。前後左右はWASDで良いとして、カメラのロールや上下をどう割り当てるのが分かりやすいか試行錯誤中。他の操作との統一も必要になりますから、キー定義を一括管理するクラスが必要になりますね。どう書けば良いのか……。
ちなみにここで早苗さんのポッチリがチラっと見えるのですが、私のDK1では解像度が足りないせいか今一つはっきりしません。残念!!(キャプチャ画面はSDKのデバッグ画面ですので、実際はもう少しきれいです)
ぶっちゃけ、ここで早苗さんと見つめ合ってるだけでも大満足です。自分の部屋に早苗さんがいる!!!というのは感動ものです。
5.メニュー画面
今のところ一番苦労しているのかこのメニュー処理です。Unity標準の操作ではOculusともキーボード使用とも相性が悪いので、キーボード操作用メニュー画面を書き起こしています。
いちおう3Dらしくアニメーションしますが、ちょっとショボイです。SAOみたいなスクロールメニューが良かったのですが、私には難易度が高すぎました。
この辺りからUnityの作法に慣れてきたので、そこそこ汎用的に書いていますが、まだ判らないことだらけですね。
モーションをキー操作で切り替えて再生するぐらいはすぐできるのですが、メニューを付けたり演出を入れたりすると途端にハードルが高くなりますね。
どこで挫折するか、飽きて放り出すか判りませんがとりあえずやる気がある間に作ってしまいたいものです。
Oculusを購入したのは去年の1月頃でした。
その頃はUnityでOculus対応のプログラムを作成するためにはUnityのProライセンスが必要だったので、4カ月の試用ライセンスが切れてから触っていなかったのですが、今は無料のStandard版でも作れるようになっているのを知り、再びいじりりはじめています。
とりあえず、早苗さんを自分の部屋に呼んでイロイロしたいなというソフトを書いてみています。ほぼ紙芝居プログラムとはいえ、こういったリアルタイム処理は書いたことが無いので作法が判らず壁に突き当たることばかりです。知り合いにゲームプログラマでも居れば良いのですけどね。
とりあえず組みはじめて、何が必要になりそうかを洗い出していきます。
1.HSWD待機処理
Oculus の SDKを最新にすると、以前にはなかったこんな警告メッセージが画面に表示されるようになっていました。
プログラムのことはお構いなしに画面にオーバーラップ表示されるので、起動直後に演出があるようなプログラムだと困ってしまいます。
仕方が無いので、警告が表示されている間は待機する処理を入れることにしました。急いでいる時には面倒ですよね!
2.フェードインフェードアウト処理
警告メッセージが終わったらBGMと同時に画面をフェードインさせます。
この画面フェードイン処理、以前は2DのTextureを画面いっぱいに表示し、それをだんだんと透明度を上げることで実現できていたと思ったのですが、久々にその処理を使って見ると使えなくなっています。
仕方が無いので、カメラを黒い箱で覆い隠して、その箱の透明度を上げることで実現する事にします。これも実は問題ありなのですが、あまりこだわっても仕方が無いので。
Canvas用とBGM用のフェードインフェードアウト処理を別に用意しましたが、汎用的なコンポーネントとして作成できるかもしれません。要検討です。
タイトルロゴはてきとう。本当はカメラにオーバーラップさせたかったのですが、どうもOculusでは実現するのはちょっと面倒なようなので、カメラの前にタイトルのオブジェクトを浮かべるだけに留めています。
3.シーン管理
そして何かキーを押すとタイトルはフェードアウトし、画面の外から早苗さんが飛び込んできます。
Oculusを被ってテストしてると、判っているのにビクッとしてしまいます。
ここからメニューセレクトと位置調整モードに入りますが、タイトル画面からの流れを制御する仕組みが難しいですね。
今はシーン管理用のスクリプトを用意して状態遷移を書いていますが、状態遷移が複雑になると管理が破たんしそうです。このあたり、一般的にはどうしているんでしょうかね。参考になる文献とかあるとよいのですが。
4.カメラ移動
早苗さんと見つめ合いながら、自分の頭の位置にカメラが来るようにキーボード操作で調整できるようにします。標準の移動処理はゲーム用の移動処理なので、別途移動処理を書き起こしています。
しかし、ここでキーの定義に悩み中。前後左右はWASDで良いとして、カメラのロールや上下をどう割り当てるのが分かりやすいか試行錯誤中。他の操作との統一も必要になりますから、キー定義を一括管理するクラスが必要になりますね。どう書けば良いのか……。
ちなみにここで早苗さんのポッチリがチラっと見えるのですが、私のDK1では解像度が足りないせいか今一つはっきりしません。残念!!(キャプチャ画面はSDKのデバッグ画面ですので、実際はもう少しきれいです)
ぶっちゃけ、ここで早苗さんと見つめ合ってるだけでも大満足です。自分の部屋に早苗さんがいる!!!というのは感動ものです。
5.メニュー画面
今のところ一番苦労しているのかこのメニュー処理です。Unity標準の操作ではOculusともキーボード使用とも相性が悪いので、キーボード操作用メニュー画面を書き起こしています。
いちおう3Dらしくアニメーションしますが、ちょっとショボイです。SAOみたいなスクロールメニューが良かったのですが、私には難易度が高すぎました。
この辺りからUnityの作法に慣れてきたので、そこそこ汎用的に書いていますが、まだ判らないことだらけですね。
モーションをキー操作で切り替えて再生するぐらいはすぐできるのですが、メニューを付けたり演出を入れたりすると途端にハードルが高くなりますね。
どこで挫折するか、飽きて放り出すか判りませんがとりあえずやる気がある間に作ってしまいたいものです。