前回カラーチェンジをしました。
今回はLeapMotionでシャボン玉に物体を包ませるのと、音声認識でザ・ワールドをします!
完成品はこちら
- ジョジョ×LeapMotion
- ソフト&ウェット
- 触ったらシャボン玉の中に入る
- シャボン玉を動かす
- 音声認識
- シャボン玉の形がゆがむ
- ザ・ワールド
- 画面
- 音
- UnityCollaborate
- 最後に
- コード
ジョジョ×LeapMotion
LeapMotionで実装できそうなスタンド能力をまとめた。触る系のやつ
3部
子供にする(アレッシー)
磁石にする(マライア)
4部
破壊物を元に戻す(クレイジーダイヤモンド/東方 仗助)
触れるものを透明化(赤ちゃん)
重くする(エコーズアクト3)
5部
生命を与える。(ジョルノ)
8部
シャボン玉で包んで飛ばす。
参考
生命を与えるとシャボン玉で包んで飛ばすがやりたい!
今回はシャボン玉
ソフト&ウェット
ジョジョリオンで定助がシャボン玉で何かを包んで運ぶシーンが何個かあったのでそれをLeapMotionで再現してみたいと思います!
包んでたのはネジと鍵とイチイの実が主かな~
とりあえずカギとネジを用意
昔シャボン玉を作った。
今回は原作同様星マークを付けました。
テクスチャ
シャボン玉は布にする必要はないかな
触ったらシャボン玉の中に入る
手と物体が衝突したら物体の位置が常にシャボン玉の位置になるようにします。
衝突は
でとれる。
シャボン玉の位置は時間ごとに変わるからUpdate内で更新したい。
けどOnTriggerStayはupdate的な挙動をしない。
Update内でOnTriggerStay();を呼び出したら、()の中にコライダーを指定しないといけないみたいだけど、何を入れたらいいか分からなかった。
Collider otherのotherのオブジェクト情報をUodate内で使いたいけどやり方がわからない。
(せっかく周りに強い人が居たんだから誰かに聞けばよかった。)
結局ワークアラウンドな方法を使った。
あらかじめpublicで鍵のゲームオブジェクトを持ってきておく。
衝突したらflagでUpdateで伝えて、それの位置をシャボン玉に変えてる(伝わらない)
otherの位置情報を変えるんじゃなくて、決め打ちでオブジェクトを動かしてる。
シャボン玉を動かす
シャボン玉をどう動かそう?
今とりあえず簡単に動くために人差し指の「子オブジェクト」にしている。
人差し指の先にシャボン玉があるのはかっこいい
これはこれでいいので、鍵を取り込めたらこの親子関係を切って、適当なシャボン玉っぽいアニメーションにする。
親子関係を切るのは簡単だった!
子.transform.parent = null;www.sawalemontea.com
ふわふわさせるのはitweenでやればよさげ
まんまお借りしました。
上下にふわふわできた。
本当はもっとシャボン玉っぽい挙動を実装したかったけどやり方がわからない。
ランダムで位置移動するようにしたらいいのかな〜
音声認識
この親子関係を切ってふわふわさせるという動作のトリガーを音声認識でします。
LeapMotionの操作中ってマウスもキーボードも押せないから音声認識がいい。
以前音声認識をやった時はIBMのワトソンとかGoogleのとか外部のやつを使った記憶があります.
しかしUnityのコードだけで実装できるそうです。(Windows10限定)
こちらの記事のコードをお借りしました。
何の設定をしなくても認識してくれました!
日本語も英語も!
めっちゃ簡単!!!精度も良かった!!
セリフは
「soft and wet」「soft」
「ザ・ワールド」「ワールド」
「そしてときはうごきだす」「うごけ」
のように一つの反応してほしい単語につき何種類か予備単語を登録できます。
周りに人がいたのでデバッグ中は右側のセリフしか言ってなかったのですが、左の長いセリフも反応したり反応しなかったりします。
でも発表の時左で言ったら全然反応しなくて恥ずかしかったよ!
シャボン玉の形がゆがむ
指の先につけたシャボン玉の形が楕円になってしまいます。最初カメラが歪んでるのかと思った。
これは親のTransformの影響を受けているためです。
昔同じような状況になってteratailで相談した。
L_index_cを無理やり1にしたいいか分からなかったので、とりあえず無視します。
ただソフト&ウェットを使って指との親子関係が切れた後も楕円になってしまっているのでそれは無理やりスクリプトで正しい形にしました。
ザ・ワールド
シャボン玉の動きはiTweenの
iTween.Stop(syabon, "move");
で止められました。
それだけじゃないで何か別の動くものを止めたいと思います。
この風車を止めます。
最初から回ってくれています。
Animatorをスクリプトから止めるのはこちらの方法でできました。
止めるとき
husha.enabled = false;
m_animStartTime = husha.GetCurrentAnimatorStateInfo(0).normalizedTime;
再び動かすとき
husha.enabled = true;
husha.Play(MOVE_ANIM_NAME, 0, m_animStartTime);
MOVE_ANIM_NAMEはanimの名前を最初に宣言
const string MOVE_ANIM_NAME = "Take 001";
ついでに「ザ・ワールド」っていうときにカラーチェンジをしています。それは前と同じ要領。
usingにPostProcessingを入れないといけない
using UnityEngine.PostProcessing;
画面
LeapMotionの画面構成難しすぎる。
手を動かせる範囲が狭い。物を置く場所と手が出現する場所が被ってうまく配置できなかった。
LeapMotionはVRに向いているというかデスクトップで画面構成がしにくすぎるんだ!
Fogつけたりした。
音
ザ・ワールドの時の時計のカチカチという音はこちらから
そして時は動き出すのときはこちら。
長かったのでwebサービスでカットしました。
BGM
UnityCollaborate
今回はミニハッカソンみたいな感じでした。
久しぶりにUnityCollaborateを使ってプロジェクトを二人で共有しました。
それぞれフォルダを分けて、シーンも分けました。
共通箇所は最初のシーンセレクト画面だけです。
1年ぶりぐらいに使いましたが、基本的にはスムーズに使えました。
ただ途中で勝手にUnityからサインアウトされててCollaboもはたらいてなかったり、自分おフォルダが消えて30分まえのアップデートから復活させたりと若干のトラブルもありました。
最後に
こっそり配布しています
こういうゲームでもツールでもない物を作るの楽しい!!!
ジョルノの物に生命を吹き込むやつも、花の成長アセットとかあればできそうだな〜
1万円のはずなのに日本Amazon2万円近くになってる。.comの方が安いらしい
いい商品がない