はこねのはこ

はこねさんの備忘録

一人でもテニスができるようにUnityでVRテニスゲームを作りたいねこ[1]

はじめに

今回もラケットの代わりにフライパンが出てきますが、

心の目で見ればテニスラケットです。

前回の進捗はこちら。

hakonebox.hatenablog.com

steamVRのプラグインを導入して、Unity上でHMDの検出、コントローラの検出を行いました。

しかし、Physic MaterialでBouncinessを調整しただけでは、 コントローラをラケットのように振った場合、うまく飛ばないという結果になりました。

くやしい

のでなんとか前に飛ばしたいです。

今回の目標

コントローラーをテニスラケットのようにスイングし、 当たったボールを前に飛ばす。

作戦

Addforceでボールに瞬間的な加速を与えようと思います。 イメージはこんな感じ。

f:id:hakonebox:20180327013408p:plain

上が前回で下が今回。 認識間違えてたらごめんなさい。

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でボール撃つぞ!!!

スクリプトリファレンスはこちら

docs.unity3d.com

docs.unity3d.com

実装

ラケットのIsTriggerをONにして、ラケットのColliderを当たり判定のみにします。

f:id:hakonebox:20180327014505g:plain

適当に書きます。

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);
        }
    }
}

ラケットにアタッチしてみましょう。

打てました。

f:id:hakonebox:20180327024137g:plain

フルスイングしても大丈夫でした。 すごく見にくいですが、ボールを飛ばせました。

課題

  1. 当たれば飛ぶってコードなので、実用性ある形に落とす
  2. ラケットのスイングスピードで与える力を変えられるように
  3. ボールが見にくいのでオーラをまとわせるなりなんなりで目立たせる
  4. フルスイングすると部屋が壊滅しかねないくらい危険
  5. 打つ角度を狙えるようにする

さいごに

課題はできましたが、 前に飛ばせたので、今日の分は満足です。

はこねさん用の音声認識と読み上げのセットアップメモ(ゆかりねっと)

はじめに

前回の記事ではfacerigで表情を取り込めました。 今回は声を何とかしてみようと思います。

hakonebox.hatenablog.com

ちょっと前にボイスチェンジャーで何とかしてみようと思ったのですが、

ダミダミしてしまってどうにもできなかったので、

今回はゆかりねっと、VOICEROIDを用いて音声認識から音声合成読み上げを試してみようと思います。

目標

自動で音声認識、読み上げを試す。

環境

・ VOICEROID2 紲星あかり

・ ゆかりねっと

Google Chrome

"VOICEROID2 紲星あかり"とは

VOICEROID2 紲星あかり|製品情報|AHS(AH-Software)

入力文字読み上げソフトです。

f:id:hakonebox:20180321183647j:plain

VOICEROIDは非営利目的による配布が前提みたいです。

テキストを打ち込むだけで、音声合成を行えます。 f:id:hakonebox:20180321184017p:plain

"ゆかりねっと"とは

音声認識トークアプリです。 開発者はおかゆぅさんです。

利用規約を確認すると、 おかゆぅさんはイケメンらしいです。

www.okayulu.moe

おかゆぅさんマジイケメンです。

手順

  1. ゆかりネットの起動 f:id:hakonebox:20180321185745p:plain

  2. 紲星あかりプラグインの設定 プラグイン→VOICEROID2の設定から、プラグインの設定をします。 f:id:hakonebox:20180321185958p:plain

  3. VOICEROID2をonにして話してみる。 f:id:hakonebox:20180321190452p:plain 話せました。

さいごに

マイクに話してから数秒のラグがあるのでfacerigと合わせてみると、 口の動きと音声が合わなかったので、 後付けのほうがいいのかな。

しかし、これだけで音声認識音声合成が使えるようになりました。 開発者の方々には頭が上がりません。

参考にさせていただいたサイト

xn--w8jxbvbn6g2byc.com

はこねさんとしてバーチャルの世界に旅立つセットアップメモ(FaceRigに自作Live2Dアバターを組み込む)

はじめに

なんでもできる!なんでもなれる! そんなわけでバーチャルの世界に行きます。

タイトルに"自作Live2Dアバター"と記載していますが、 作成したのは"はいき丸さん"です。 https://twitter.com/haikimaru/status/975404685266792448

unity1weekでは、イラスト、モデルの作成をお願いしています。

ちょっと宣伝

おさしみつくるよ | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

すぺーすくらふたー | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

ハコネコー | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

今回の目標

FaceRigで自作Live2Dアバターを動かして、Skypeで映す。

できました

f:id:hakonebox:20180319011448g:plain さすがはいき丸さん。素敵なモデルです。

環境

・Live2D Cubism 3 ・RaceRig

手順

  1. Live2Dのデータの書き出し Live2D Cubismのメニュー→ファイル→mocファイルの書き出しを選択し、 書き出しの設定でSDK2.0以上が選択されていることを確認。

  2. ファイルの保存 Steamフォルダのsteamapps/common/FaceRig/Mod/VP/PC_CustomData/Objectsの中にファイルごと保存します。 環境によって場所は変わると思います。 フォルダ名と各種ファイルの名前は一致させる必要があるようです。 例) HakoneVEで統一 HakoneVE ├HakoneVE.2048 ├HakoneVE.json └HakoneVE.moc3 f:id:hakonebox:20180319013253p:plain

  3. FaceRig起動 f:id:hakonebox:20180319013528p:plain

  4. アバターの選択 f:id:hakonebox:20180319013659p:plain 画面上の人のマークを押し、追加したアバターを選択します。 デフォルトでは?アイコンでしょうか。

  5. 位置の調整 f:id:hakonebox:20180319014143p:plain Altとマウスホイールを押しながらマウスを動かすと一の調整。 Altとマウスホイールで拡大縮小ができます。

  6. ブロードキャストの有効 f:id:hakonebox:20180319014406p:plain アドバンスUIからブローキャストに切り替えを行います。

  7. Skypeのビデオ設定 f:id:hakonebox:20180319014538p:plain Skypeの設定で、ビデオをFaceRig Virtual Cameraを選択します。

さいごに

バーチャルの住人になります。 細かいことは決まってないです。

一人でもテニスができるようにUnityでVRテニスゲームを作りたいねこ[0]

はじめに

f:id:hakonebox:20180318044406p:plain テニスって楽しいですよね。 しかし、一人ではいつでも好きな時にテニスができないので、 VR空間上で一人でテニスができるようにゲームを作ってみようと思います。

HMDにはHTC VIVEを用います。 f:id:hakonebox:20180318022356p:plain

HTC VIVEを用いた開発は初めてなので、 右も左も何が必要なのかも知らないので、 まずはラケットでボールを打つところまで進めてみようと思います。

注意!!うまくいってません!!!

今回の目標

VIVEコントローラを振ることボールを撃つ。

環境

  • Windows10
  • GeForce GTX 1070
  • Unity 2017.3.1f1
  • HTC VIVE

ヘッドセットとコントローラをUnityの世界に認識させる。

SteamVR examleを動かしてみる

f:id:hakonebox:20180318023440p:plain

AssetStoreで"SteamVR"と検索すると、プラグインが出てきました。

f:id:hakonebox:20180318023606p:plain 完成プロジェクト見たいです。 すべてインポートします。

f:id:hakonebox:20180318023844p:plain

Accept Allを選択します。

f:id:hakonebox:20180318025754g:plain

特に問題なく動かすことができました。

仮のSceneを作る

仮のテニスコートを用意します。 新しくSceneを作成し、 cubeを用いてパパパっと配置します。

f:id:hakonebox:20180318031438p:plain 誰が何と言おうと立派なテニスコートです。

もとからあったMain Cammeraを削除して、 [CameraRig]を追加します。

f:id:hakonebox:20180318031820p:plain

[CameraRig]の高さを調節しておきます。

これで動かしてみましょう。

これだけでコートに立てました。 すごいなUnityすごいなsteamVRプラグイン

f:id:hakonebox:20180318032844g:plain

ボールを打ってみる

道具の準備

ボールとラケットを準備します。 どちらも持っていないので、 ボールはSphere、ラケットはフライパンで代用します。 ボール、フライパンにはPhysic Materialをあて、 とりあえずBouncinessは1にします。

f:id:hakonebox:20180318040421p:plain

れっつぽんぽん

とても残念な動きですが、ポンポンできました。

ただ。フライパンを早くスイングするとうまくいかないようです。 物理でボールを反発させるより、当たった時に力を加えるスクリプトで制御したほうがいいのかな。

f:id:hakonebox:20180318043727g:plain

さいごに

想定した動きはできませんでしたが、 steamVRの導入のやり方がわかったのでよしとします。

参考にさせていただいたサイト

Unity+Viveで開発する - Qiita

Unity 1週間ゲームジャム[当てる] シューティングゲーム"ハコネコー"公開しました。

はじめに

"当てる"がお題のUnity1weekが開催されてから もう2週間以上が経過していますね。

みなさんいかがお過ごしでしょうか。

今回の開催期間は 2018-02-19 〜 2018-02-25でした。

今回の開発は振り返っておきたいと思いつつ、 ブログの開設から記事を書くまで2週間もかかってしまいました。

やっと指が動き始めたので振り返っていこうと思います。

完成したもの

公開先のリンクです。

ハコネコー | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

f:id:hakonebox:20180315233248g:plain

5作目のゲームになりました。

どうしてシューティングゲーム

開催初日を振り返ると、ビームを当てたいって言ってました。 完成したものは全然ビーム感出てないですが、ねらって打つゲームを作りたいって考えてました。

また、開催の直前にUnityでアニメーションクリップの新規作成方法を知ることができたので、 簡単なアニメーションを作成した3Dシューティングを作成したいと考えました。

一週間のふりかえり

予定していたスケジュール

個人的なこだわりとして、必ず期限までに公開することを目標にしてすすめました。

1日目:ロボット(敵キャラ)のアニメーション作成

2日目:はこねこ(自キャラ)のアニメーション作成、移動、エイム、弾の発射

3日目:敵キャラが弾に当たると爆発

4日目:敵キャラにnavmesh搭載

5日目:タイトル、音楽関係

6日目:ランキング、ツイート機能対応

7日目:クオリティアップ

1日目成果

予定通り。 覚えたてのアニメーションクリップの作成ができました。

2日目成果

ちびキャラは手が足りないことを知る。

ちびキャラの足の動かし方とかに手間取り、妥協しながらアニメーションの完成

3日目成果

WASDとマウスで照準合わせを実装しました。 このころは、TPSの操作がよく分かっておらず、ADキーは移動ではなく、向きを変えるだけの動きになっていました。

弾も発射できていない状態でした。

4日目成果

弾が発射できるようになりました。 アセットストアでかっこいいビームを探したのですが、うまいこと見つけられずに妥協。

5日目成果

敵が爆発するようになりました。

この日にキングクリムゾン現象に当たりました。

原因は弾がフレームの隙間?に敵を通り越していることが原因でした。 このときは弾の速度を遅くして妥協していました。

6日目成果

フィールドを作成して、 初めてnavmeshを使ってみました。

自キャラに向かってくるようにするのは、すごく簡単だったのですが、 敵キャラがこちらを向いてくれないことに悩み、 回転させることで妥協しました。

7日目

音楽とタイトル、リザルト、ランキング、ツイート機能を実装して、締め切りの4時間程前に完成、 妥協はあったものの、少し余裕を持たせての完成でした。

アップデート

v1.1→1.2→1.3とアプデしました。

実況していただいたり、感想をもらったりでできる限り反映させました。

得られたことと今後の課題

妥協が妥協を生み妥協フェスティバルでしたが、 今回の開発で知ることも多かったです。

navmesh

敵キャラを自キャラに向かわせる動作を実現するために、navmeshを取り入れました。 しかし、こちらを向かなかったり、まだ完全に使いこなせていないので、原因を探っていきたいです。

アニメーション

unityエディタ上でアニメーションクリップを作成できるようになりました。 しかし、なんともぎこちないし、完成まで時間がかかる.. unityエディタ以外でアニメーションクリップの作成(Blender等)ができるようにしたいです。

フレーム落ちの対策

弾が敵をすり抜ける現象が起きたおかげで、 原因と対策を学べました。

マウスによるエイム

横の移動のみでしたが、マウスカーソルを固定して、マウスの移動で標準を合わせる機能を実装できました。

思ったことをつらつらと

私はFPS,TPSはほとんどやったことがなかったので、自分の想像で作ることが多く、完成したものを見ると、 達成感が不足していたり、思うような楽しさが得られませんでした。

TPS苦手な人には難しいし、 得意な人には簡単で、 ターゲットを絞れていませんでした。

自分がまけない限りゲームが続くようなシステムですが、 作業感が出できてしまう...

ゲームデザインは難しいですね。

ただ、第一作のユニティちゃんのうえにユニティちゃんからは 明らかに成長できている気がします。 今見るとなつかしいな。

https://unityroom.com/games/unitychan-on-unitychan/webgl

完成させることで精いっぱいで、ほとんどサンプルゲームから持ってきていたのですが、 自分でも成長を実感できています。

これが継続の力...

最後に

文章が小学生みたい。 2週間以上経過したせいで記憶が薄れている... これから頑張ろうねこ。

参加した皆様、お疲れさまでした。