#UEで音声認識を使ったゲームを作ってみた
背景
初めまして!呪文を声に出して読みゲームの中で発動するのはロマンを感じますね。
そんなゲームを作りたいと思ったので今回その骨組みみたいなものの実装方法を紹介します。
完全なゲームの製作過程を紹介するわけではありません。
コンセプトは 呪文を言う -> 魔法が銃に込められる -> 撃って敵にあてる -> その敵に魔法が発動するという感じです
事前準備
この記事の手順に従って準備をしてください。
https://qiita.com/tukigaselio/items/179621c4f5545e929d50
*Model Sizeを調整したい方はset streaming default を set recognition Parametersに変更してプロパティのparameterを分解してください。
*私は5.3.2でエラーが出たので5.4.4を使用しました。
実装
1 入力された言葉の処理
1 言葉を変数に格納

Recognizer_Textに言葉を格納する。
2 言葉が有効なものか確認

前に入力された呪文をリセットしています。

入力された言葉に合致する呪文があるか探しています。私は「焼けろ」「爆ぜろ」「吹き飛ばせ」と いう呪文を作りました。しかし、googleの音声認識ほどの精度はないので変数T_Fireには「やけ ろ」「やけど」「やける」「やけど。」をいれておいて間違った変換をカバーしています。あと!や。 は半角全角で違うので注意してください。
3 言葉に結びつくプロパティを配列に格納


銃を発砲したとき発生するエフェクトと音と敵に銃弾が当たった時に発生するエフェクトと音、ダメージ量、呪文の種類を構造体にして配列に格納しています。好きなエフェクトやサウンドを設定してください。
2 敵の実装
ナビゲーションボリュームで地面を覆う

ブループリント -> defaultPawn

プレイヤーを追跡させる

3 HPとダメージ処理
1 プレイヤーのHPとダメージ処理
死亡処理

敵から受けるダメージ計算

2 敵のHPとダメージ処理
死亡処理

プレイヤーから受けるダメージ計算

プレイヤーへの攻撃処理


4 銃の実装
1 銃のアクタを実装
私はMilitaryWeaponsSilverアセットのピストルを使ったのですがFabになかったのでかわりの武器のURLを貼っておきます。
ブループリント -> アクタ
skeletalMeshComponentを追加する

skeletalMeshComponentに銃を追加

2 プレイヤーに装備させる
ChildActorConponentを追加

hand_rにソケットを追加する

skeletalMeshComponentをソケットにアタッチする

をbeginplayイベントで実行させる
ゲームをプレイ中に銃のskeletalMeshComponentを移動させて銃の位置を調節する。
3 プレイヤーにアニメーションをつける
1 ミクサモから銃を構えるアニメーションと銃を撃つアニメーションをUEにインポートする
2 アニメーションブループリントをABP_Mannyからコピーして新たに名前を付けます。
AnimGraph



Mainstate_PistolはデフォルトのMainStateと同じです
LayeredBlend per boneは上半身と下半身で別々のアニメーションを適用しています。
またlayerBlend per bone -> Layer Setup -> Branch Filters -> BoneNameを spine01,Blend Depthを0にします。
そして、Mesh Space Ratation BlendとMesh Space Scale Blendをtrueにします。
4 発砲の実装
発砲のモンタージュにFireという通知を追加してください

charactorBPに移動して





characterにactorcomponentを追加する



Damage First Non Team Member関数に対して

Trriger Bullet Hit Effect関数に対して

できたもの
まとめ
お疲れさまでした。細かいところの説明を端折ったので、必要な説明が抜けていましたらぜひ教えてください。いつかプラグインに頼らず自分で音声解析したいですね。(今回挑戦しようとして1日で「あっ、無理だこれ」となったのは内緒)
Discussion