一人でもテニスができるようにUnityでVRテニスゲームを作りたいねこ[1]
はじめに
今回もラケットの代わりにフライパンが出てきますが、
心の目で見ればテニスラケットです。
前回の進捗はこちら。
steamVRのプラグインを導入して、Unity上でHMDの検出、コントローラの検出を行いました。
しかし、Physic MaterialでBouncinessを調整しただけでは、 コントローラをラケットのように振った場合、うまく飛ばないという結果になりました。
くやしい
のでなんとか前に飛ばしたいです。
今回の目標
コントローラーをテニスラケットのようにスイングし、 当たったボールを前に飛ばす。
作戦
Addforceでボールに瞬間的な加速を与えようと思います。 イメージはこんな感じ。
上が前回で下が今回。 認識間違えてたらごめんなさい。
AddForceとは
Rigidbodyに力を加えます。
public void AddForce (Vector3 force, ForceMode mode= ForceMode.Force);
パラメータ | 説明 |
---|---|
force | ワールド座標における力のベクトル |
mode | 適用する力のタイプ |
力は、アクティブのRigidbodyに対してのみ適用することができ、GameObjectが非アクティブに場合は効果がないようです。
続いてmodeを確認します。
mode | 説明 |
---|---|
Force(default) | 質量を使用して、Rigidbodyへ継続的な力を加えます。 |
Acceleration | その質量を無視して、Rigidbodyへ継続的な加速を追加します。 |
Impulse | その質量を使用し、Rigidbodyに瞬間的な加速を追加します。 |
VelocityChange | 質量を無視して、Rigidbodyに瞬間的な加速を追加します。 |
ForceModeを指定しないとForceになるようです。
そんなわけでImpulseでボール撃つぞ!!!
スクリプトリファレンスはこちら
実装
ラケットのIsTriggerをONにして、ラケットのColliderを当たり判定のみにします。
適当に書きます。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Shot : MonoBehaviour { public GameObject Ball; //ボール public float speedZ = 10f; //スピード public float speedY = 3f; //ボールに当たった場合 void OnTriggerEnter(Collider col) { if(col.tag == "Ball") { Vector3 Force; Force= new Vector3(0,speedY,speedZ); Ball.GetComponent<Rigidbody>().AddForce(Force,ForceMode.Impulse); } } }
ラケットにアタッチしてみましょう。
打てました。
フルスイングしても大丈夫でした。 すごく見にくいですが、ボールを飛ばせました。
課題
- 当たれば飛ぶってコードなので、実用性ある形に落とす
- ラケットのスイングスピードで与える力を変えられるように
- ボールが見にくいのでオーラをまとわせるなりなんなりで目立たせる
- フルスイングすると部屋が壊滅しかねないくらい危険
- 打つ角度を狙えるようにする
さいごに
課題はできましたが、 前に飛ばせたので、今日の分は満足です。
はこねさん用の音声認識と読み上げのセットアップメモ(ゆかりねっと)
はじめに
前回の記事ではfacerigで表情を取り込めました。 今回は声を何とかしてみようと思います。
ちょっと前にボイスチェンジャーで何とかしてみようと思ったのですが、
ダミダミしてしまってどうにもできなかったので、
今回はゆかりねっと、VOICEROIDを用いて音声認識から音声合成読み上げを試してみようと思います。
目標
自動で音声認識、読み上げを試す。
環境
・ VOICEROID2 紲星あかり
・ ゆかりねっと
"VOICEROID2 紲星あかり"とは
VOICEROID2 紲星あかり|製品情報|AHS(AH-Software)
入力文字読み上げソフトです。
VOICEROIDは非営利目的による配布が前提みたいです。
テキストを打ち込むだけで、音声合成を行えます。
"ゆかりねっと"とは
音声認識型トークアプリです。 開発者はおかゆぅさんです。明日再度つぶやくと思いますが、ゆかりねっと V.0.3.4 を公開しました。https://t.co/kJyvow9ecp
— おかゆぅさん (@okayulu_nico) 2018年1月19日
主な内容は以下です。
・V.0.3.3 で直したと思っていたVOICEROID2が固まる現象の再修正
・ペテン師先生のゆかりさんがSSRを引く確率でパージする
・β版の平仮名変換、みさくら後変換の実装
おかゆぅさんマジイケメンです。
手順
さいごに
マイクに話してから数秒のラグがあるのでfacerigと合わせてみると、 口の動きと音声が合わなかったので、 後付けのほうがいいのかな。
しかし、これだけで音声認識、音声合成が使えるようになりました。 開発者の方々には頭が上がりません。
参考にさせていただいたサイト
はこねさんとしてバーチャルの世界に旅立つセットアップメモ(FaceRigに自作Live2Dアバターを組み込む)
はじめに
なんでもできる!なんでもなれる! そんなわけでバーチャルの世界に行きます。
タイトルに"自作Live2Dアバター"と記載していますが、 作成したのは"はいき丸さん"です。 https://twitter.com/haikimaru/status/975404685266792448
頭部のモデリングが一通り終わったので、はこねさんの方でfacerig試してもらう
— はいき丸 (@haikimaru) 2018年3月18日
unity1weekでは、イラスト、モデルの作成をお願いしています。
ちょっと宣伝
おさしみつくるよ | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう
すぺーすくらふたー | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう
ハコネコー | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう
今回の目標
FaceRigで自作Live2Dアバターを動かして、Skypeで映す。
できました
さすがはいき丸さん。素敵なモデルです。
環境
・Live2D Cubism 3 ・RaceRig
手順
Live2Dのデータの書き出し Live2D Cubismのメニュー→ファイル→mocファイルの書き出しを選択し、 書き出しの設定でSDK2.0以上が選択されていることを確認。
ファイルの保存 Steamフォルダのsteamapps/common/FaceRig/Mod/VP/PC_CustomData/Objectsの中にファイルごと保存します。 環境によって場所は変わると思います。 フォルダ名と各種ファイルの名前は一致させる必要があるようです。 例) HakoneVEで統一 HakoneVE ├HakoneVE.2048 ├HakoneVE.json └HakoneVE.moc3
FaceRig起動
位置の調整 Altとマウスホイールを押しながらマウスを動かすと一の調整。 Altとマウスホイールで拡大縮小ができます。
ブロードキャストの有効 アドバンスUIからブローキャストに切り替えを行います。
さいごに
バーチャルの住人になります。 細かいことは決まってないです。
一人でもテニスができるようにUnityでVRテニスゲームを作りたいねこ[0]
はじめに
テニスって楽しいですよね。 しかし、一人ではいつでも好きな時にテニスができないので、 VR空間上で一人でテニスができるようにゲームを作ってみようと思います。
HMDにはHTC VIVEを用います。
HTC VIVEを用いた開発は初めてなので、 右も左も何が必要なのかも知らないので、 まずはラケットでボールを打つところまで進めてみようと思います。
注意!!うまくいってません!!!
今回の目標
VIVEコントローラを振ることボールを撃つ。
環境
- Windows10
- GeForce GTX 1070
- Unity 2017.3.1f1
- HTC VIVE
ヘッドセットとコントローラをUnityの世界に認識させる。
SteamVR examleを動かしてみる
AssetStoreで"SteamVR"と検索すると、プラグインが出てきました。
完成プロジェクト見たいです。 すべてインポートします。
Accept Allを選択します。
特に問題なく動かすことができました。
仮のSceneを作る
仮のテニスコートを用意します。 新しくSceneを作成し、 cubeを用いてパパパっと配置します。
誰が何と言おうと立派なテニスコートです。
もとからあったMain Cammeraを削除して、 [CameraRig]を追加します。
[CameraRig]の高さを調節しておきます。
これで動かしてみましょう。
これだけでコートに立てました。 すごいなUnityすごいなsteamVRプラグイン。
ボールを打ってみる
道具の準備
ボールとラケットを準備します。 どちらも持っていないので、 ボールはSphere、ラケットはフライパンで代用します。 ボール、フライパンにはPhysic Materialをあて、 とりあえずBouncinessは1にします。
れっつぽんぽん
とても残念な動きですが、ポンポンできました。
ただ。フライパンを早くスイングするとうまくいかないようです。 物理でボールを反発させるより、当たった時に力を加えるスクリプトで制御したほうがいいのかな。
さいごに
想定した動きはできませんでしたが、 steamVRの導入のやり方がわかったのでよしとします。
参考にさせていただいたサイト
Unity 1週間ゲームジャム[当てる] シューティングゲーム"ハコネコー"公開しました。
はじめに
"当てる"がお題のUnity1weekが開催されてから もう2週間以上が経過していますね。
みなさんいかがお過ごしでしょうか。
今回の開催期間は 2018-02-19 〜 2018-02-25でした。
今回の開発は振り返っておきたいと思いつつ、 ブログの開設から記事を書くまで2週間もかかってしまいました。
やっと指が動き始めたので振り返っていこうと思います。
完成したもの
公開先のリンクです。
ハコネコー | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう
5作目のゲームになりました。
どうしてシューティングゲーム
やっぱりビームを当てたい。(希望
— はこね (@hakone_san) 2018年2月19日
開催初日を振り返ると、ビームを当てたいって言ってました。 完成したものは全然ビーム感出てないですが、ねらって打つゲームを作りたいって考えてました。
また、開催の直前にUnityでアニメーションクリップの新規作成方法を知ることができたので、 簡単なアニメーションを作成した3Dシューティングを作成したいと考えました。
はじめてUnity上でアニメーションクリップの新規作成ができた。
— はこね (@hakone_san) 2018年2月17日
はいき丸さん作成のはこねこモデルを使って、"威嚇モーション"作ってみた。
今まで2Dばかりで3Dのアニメーションの作成初めてだから新鮮。
やり方わかってよかった。わーい。 pic.twitter.com/dZ7lWEmHQ2
一週間のふりかえり
予定していたスケジュール
個人的なこだわりとして、必ず期限までに公開することを目標にしてすすめました。
1日目:ロボット(敵キャラ)のアニメーション作成
2日目:はこねこ(自キャラ)のアニメーション作成、移動、エイム、弾の発射
3日目:敵キャラが弾に当たると爆発
4日目:敵キャラにnavmesh搭載
5日目:タイトル、音楽関係
6日目:ランキング、ツイート機能対応
7日目:クオリティアップ
1日目成果
予定通り。 覚えたてのアニメーションクリップの作成ができました。1日目の進捗です。
— はこね (@hakone_san) 2018年2月19日
敵キャラのアイドルとショットモーションを作成しました。
おおよそのアセットも決まり、配置してみました。
はこねこは添えるだけ。
明日ははこねこのショットモーション作ります。 #unity1week pic.twitter.com/64MQno0w4J
2日目成果
ちびキャラは手が足りないことを知る。リーチが足りない。 #unity1week pic.twitter.com/3IzjKSQa2u
— はこね (@hakone_san) 2018年2月20日
ちびキャラの足の動かし方とかに手間取り、妥協しながらアニメーションの完成2日目進捗です。はこねこちゃんにアイドルとショットと移動モーション追加しました。
— はこね (@hakone_san) 2018年2月20日
しゅっしゅっ!!
歩きモーションほとんど見えないのでなくしちゃおうかな。
キー入力で移動ができなくて1時間ほど悩んだけど、何とかなりました。 #unity1week pic.twitter.com/OML67wMBjl
3日目成果
WASDとマウスで照準合わせを実装しました。 このころは、TPSの操作がよく分かっておらず、ADキーは移動ではなく、向きを変えるだけの動きになっていました。3日目進捗。
— はこね (@hakone_san) 2018年2月21日
WASDで移動、マウスでも照準が合わせられます。
マウスで縦の照準が動かせなかったので妥協。
今回は横移動だけにします。
つかれた。 #unity1week pic.twitter.com/JH8loNxxX3
弾も発射できていない状態でした。
4日目成果
4日目進捗です。弾が発射できるようになりました。
— はこね (@hakone_san) 2018年2月22日
※弾は見やすくしてます。
ゴッドイーターみたいなバレットを再現したかったのですが、ダメでした。
でもFPSって弾丸見えないしね。気にしなくていいよね。
当たった相手が爆発するようにしてお茶を濁そう。
予定より2日遅れ。
#unity1week pic.twitter.com/q0haFmq0tJ
弾が発射できるようになりました。 アセットストアでかっこいいビームを探したのですが、うまいこと見つけられずに妥協。
5日目成果
敵が爆発するようになりました。5日目進捗です。
— はこね (@hakone_san) 2018年2月23日
敵の大砲を爆弾に変え、爆弾ねらって打つと敵が爆発するようにしました!!!
のですが、
距離によって当たり判定しないって現象が起きていて、
まったく原因がわかりません。
移動すると当たるんだけど何が問題なんでしょうか。
弾が早くで当たれていない?
#unity1week pic.twitter.com/GGWn2dbeq5
この日にキングクリムゾン現象に当たりました。
原因は弾がフレームの隙間?に敵を通り越していることが原因でした。 このときは弾の速度を遅くして妥協していました。
6日目成果
断腸の思いで敵が常に回転するアニメーションを作りました。
— はこね (@hakone_san) 2018年2月24日
常に回転してたらこっち向かなくても問題ない。
苦肉の策。
この恨みはどこかで晴らす..... pic.twitter.com/AWtf9UkFEZ
フィールドを作成して、 初めてnavmeshを使ってみました。
自キャラに向かってくるようにするのは、すごく簡単だったのですが、 敵キャラがこちらを向いてくれないことに悩み、 回転させることで妥協しました。
7日目
7日目進捗です。
— はこね (@hakone_san) 2018年2月25日
完成しました。 本日20時公開です!!
(๑╹ω╹๑ ) #unity1week pic.twitter.com/y7nF3FHqQp
音楽とタイトル、リザルト、ランキング、ツイート機能を実装して、締め切りの4時間程前に完成、 妥協はあったものの、少し余裕を持たせての完成でした。
アップデート
v1.3にアップデートしました。
— はこね (@hakone_san) 2018年3月13日
①荒ぶる移動を修正(コーディングミス)
②弾の当たり判定を強化(キングクリムゾン対策)
③HowTo追加
④WAVE5から開始ボタン追加(序盤が簡単すぎる人向け) pic.twitter.com/7BncqOeV8E
v1.1→1.2→1.3とアプデしました。
実況していただいたり、感想をもらったりでできる限り反映させました。
得られたことと今後の課題
妥協が妥協を生み妥協フェスティバルでしたが、 今回の開発で知ることも多かったです。
navmesh
敵キャラを自キャラに向かわせる動作を実現するために、navmeshを取り入れました。 しかし、こちらを向かなかったり、まだ完全に使いこなせていないので、原因を探っていきたいです。
アニメーション
unityエディタ上でアニメーションクリップを作成できるようになりました。 しかし、なんともぎこちないし、完成まで時間がかかる.. unityエディタ以外でアニメーションクリップの作成(Blender等)ができるようにしたいです。
フレーム落ちの対策
弾が敵をすり抜ける現象が起きたおかげで、 原因と対策を学べました。
マウスによるエイム
横の移動のみでしたが、マウスカーソルを固定して、マウスの移動で標準を合わせる機能を実装できました。
思ったことをつらつらと
私はFPS,TPSはほとんどやったことがなかったので、自分の想像で作ることが多く、完成したものを見ると、 達成感が不足していたり、思うような楽しさが得られませんでした。
TPS苦手な人には難しいし、 得意な人には簡単で、 ターゲットを絞れていませんでした。
自分がまけない限りゲームが続くようなシステムですが、 作業感が出できてしまう...
ゲームデザインは難しいですね。
ただ、第一作のユニティちゃんのうえにユニティちゃんからは 明らかに成長できている気がします。 今見るとなつかしいな。
https://unityroom.com/games/unitychan-on-unitychan/webgl
完成させることで精いっぱいで、ほとんどサンプルゲームから持ってきていたのですが、 自分でも成長を実感できています。
これが継続の力...
最後に
文章が小学生みたい。 2週間以上経過したせいで記憶が薄れている... これから頑張ろうねこ。
参加した皆様、お疲れさまでした。