UE4 地面の種類を判別して足音を再生する
UE4の足音の再生に関しては
たくさんの方がブログなどに既に書かれていますが、
私が普段書いている処理を少し書きたいと思います。
詳しい処理の内容が知りたい方はこちら
ではやっていきます。
準備
今回はUE4 4.14.3を使用します。
プロジェクトを作成し、
Third Personテンプレートで起動します。
使用するファイルはこちらです。
同じ種類の地面につき8種類の音声ファイルを用意しました。
わかりやすい地面を作成する
※これはしなくていい作業です。
ブログを見やすくするために作成しました。
BSPを適当なサイズでStatic Meshにし、
適当なCollisionをつけています。
そして、適当に並べてStarter Contentsの中にあった
それっぽいマテリアルを適応します。
左から「土」「フローリング」「水溜まり」です。
Sound Cueファイルを作成する
Sound Cueファイルはこんな感じになっています。
地面の種類に応じて8種類の音からランダムで選択再生します。
Randomノードの先には
Int Parameter 「GroundType」を持った
Switchノードがあります。
このノードで次のPhysical Surfaceと紐づけをします。
Physical Surfaceを設定する
Project設定を開き、左側のPhysicsを選択します。
そのページの下の方にあるPhysical Surfaceの設定を行います。
Surface Typeに判別したい地面の種類を書き込んでいきます。
Sound CueのSwitchノードにつないだ、
音と同じ順番になるように記述してください。
Physical Materialを作成する
コンテンツブラウザを右クリック
Physics→Physical Mterialを選択します。
Physical Materialを選択し、Selectを押します。
Physical Materialを必要分作成し、
それぞれこのような名前をつけました。
Physical Materialを開き、先ほどProject設定で
作成したSurface Typeを適応していきます。
PM_WoodならWood、
PM_WaterならWaterという感じです。
作成したPhysical Materialをそれぞれの地面に設定します。
レベルに配置してあるMeshを選択し、
Phys Material Overrideに適応したいPhysical Materialを設定します。
処理を書く
私自身サウンド部分を担当することは多いですが、
再生部分の実装はあまり行わないので
今回はFunction Libraryを使用して処理を書きます。
コンテンツブラウザを右クリック
Blueprints→Function Libraryを選択します。
作成したFunction Libraryを開き
PlayFootStepという関数を新規追加します。
処理の全体図です。
もう少し短縮できると思うのですが、
今回はこれで行きます。
引数にPawn OwnerというActor型の変数を用意しています。
引数から得たActorのLocationを取得し、足元の判定範囲を
Line Traceに流しています。
デバッグ用にLine Traceを視覚化しています。
そのLine TraceのHit判定を利用し、足元のPhysical Materialを検出します。
Physical Materialが検出できたら、ActorのRoot Conponentに
足音用のSound CueをAttachします。
Selectノードはひし形の部分を右クリックし、
Change Pin Typeを選択します。
ここでIntegerを選択して下さい。
すると上のスクリーンショットと同じ形になります。
AttachしたSound Cueの中にあるGround Typeを変更します。
その後Play Sound For Data TableでSound Cueを再生します。
Play Sound For Data Tableについては
過去記事を参照してください。
これで実装部分の処理は完了です。
アニメーションの通知設定を行う
実装部分の処理は書いたので、
次は呼び出し処理の準備を行います。
Third Person Runというアニメーションを開いてください。
先ほどの関数の呼び出しには
Anim Notifyを使用します。
アニメーション中の足が丁度地面に着くぐらいの
ところにAdd Notify→New Notifyを選択し
FootStepという名前の通知を追加します。
通知が追加されると、こんな感じになると思います。
このアニメーションには2回足が地面に着くので、
もう一方の方にも通知を追加します。
呼び出し処理を書く
Third Person AnimBPを開いてください。
アニメーションブループリントの
イベントグラフにEvent AnimNotify_FootStepを追加します。
Event AnimNotify_FootStepが追加できたら、
作成した関数のPlayFootStepを呼び出します。
関数の引数には、Try Get Pawn Ownerから
取得できる情報を渡しましょう。
これでアニメーション通知を作成したところで
サウンドが再生されます。
確認してみる
Physical Materialを適応した箇所で
指定したサウンドがなっていると思います。
UE4 4.14.3でフリーズしてしまう対処法
私の環境ではUE4 4.14.3で
ブループリントエディタやスケルタルメッシュを開くと
必ずフリーズしていました。
フリーズはしないけど、UE4エディタを
軽くしたいという方はこちらを参考にしてください。
実際はある方に解決策を教えていただいたのですが、
いくつかの対策を試してみましたので、
物忘れの激しい私のメモとして書いておきたいと思います。
私の環境
MacBookにboot camp windowsを入れて、使っています。
お世辞にもUE4を動かすのに適した環境とは言えませんが、
4.13より前は拡張機能設定がEpicでも普通に動いていました。
(FPSは落ちていましたが...)
DerviedDataCacheを削除してみる
詳しくはこちらをご覧ください。
フリーズし始めたころにboot campを
クリーンインストールしたばかりなので、
キャッシュは溜まっていなかったのですが
一応やってみました。
このDerivedDataCacheをフォルダごと削除します。
AppDataは隠しファイルになっています。
AppDataが見つからないという方は
エクスプローラーの表示から隠しファイルにチェックを
入れると見えるようになると思います。
IMEを切り替えてみる
Answer hubを漁っているとこのようなページを見つけました。
Microsoft IME 2010を使用しているとBlueprintのコンパイルが異常に遅くなる - UE4 AnswerHub
このページではフリーズするとは書いていないものの、
動作が全体的に遅くなるというのは、
共通してたので試してみました。
Microsoft IMEがアクティブだと重くなってしまうようなので、
その他のIMEを入れてみます。
英語キーボードの設定を行います。
Windowsの設定を開きます。
2段目の左から2個目の時刻と言語を選択します。
左側のタブから地域を言語を選択し、
右側の言語タブから言語を追加するを選択します。
Englishを選択します。
一番下にEnglish(United States)があるので
これを追加します。
これで、IMEを切り替えれば
英語キーボードになると思います。
当然日本語は打てなくなりますので、
日本語を使いたいという方は
おすすめします。
こちらのページからGoogle 日本語入力IMEをダウンロードしてください。
それぞれの設定が終わったら、
Windowsキー + スペースキーでIMEの切り替えを行います。
UE4の起動中にIMEをMicrosoft IMEに切り替えると、
フリーズしてしまうようなので要注意です。
まとめ
とりあえず、私の環境では
フリーズを回避できています。
ただ、コメントなども英語でしか
打てなくなってしまっているので
早めに対策されることを願っています。
UE4 銃の弾が壁などに衝突した際の弾痕を実装する
現実の世界では銃弾が壁に当たると
ちょっと削れますよね?
今回はその弾痕の処理を実装します。
参考にしたサイトはこちら
ベクトルの計算を使用していますが、
こちらのサイトに詳しく解説されています。
ではやっていきます。
準備
UE4 4.13.3を使用します。
FPSテンプレートでプロジェクトを作成してください。
使用する弾痕のテクスチャを用意します。
※256x256の.pngです。
テクスチャを用意したら、
プロジェクトにインポートしてください。
(鮮やかだなぁ...もっと暗い色にすればよかった)
必要なものを揃える
読み込んだテクスチャを右クリックします。
Sprite Actions→Create Spriteを選択してください。
Spriteが作成されます。
次に弾痕用のブループリントを作成します。
コンテンツブラウザを右クリック→Blueprint Classを選択します。
親クラスはActorを選択します。
作成したブループリントを開いてください。
まずはコンポーネントを追加します。
左上の方にあるAdd Componentから
Paper Spriteを追加してください。
(Spriteと入力して出てくる下の方です)
追加したPaper Spriteを選択し、
パラメータを変更していきます。
Source Spriteに先ほどインポートしたテクスチャを入れます。
少しテクスチャが大きいので、Scaleを0.1にします。
RotationのZ軸を90にします。
弾痕自体にはCollisionも不要なので
Block AllからNo Collisionに変更しておきます。
これで必要なものは揃いました。
処理を書く
まずは角度が取れているかを確認します。
FPSテンプレートに入っている
First Person Projectileを開いてください。
弾の衝突座標から衝突面に垂直な
長さ90のLine Traceを出します。
※確認用の処理です。弾痕を描画するだけなら、この処理は必要ありません。
このように衝突した平面から垂直なLine Traceが
確認できると思います。
次に描画するための処理を書いていきます。
先ほどのLine Traceの処理は削除しています。
Hit Locationから単に弾痕のブループリントを生成するだけでは、
オブジェクトにテクスチャが埋まってしまいます。
そこで、Hit Locationからカメラの向きベクトルを引くことで
少しだけ手前に生成しています。
RotationはLine Traceの処理で実装したVectorの処理を
Rotationで扱っているだけです。
これで一応描画はできるのですが、
弾痕がいつまでも残ってしまうので、
最後にBP_BreakEffectに処理を追加します。
これだけです。
生成されて5秒後に消える処理です。
以上で処理は終了です。
確認してみる
どの角度でも衝突相手の平面に張り付いて見えると思います。
※Spriteを少しいじったので
上記の画像より暗く見えるのはそのためです。
余談
銃を連射しているのは前回のブログと
同じプロジェクトを使用しているからです。
参考までにどうぞ。
UE4 FPSテンプレートの銃を連射してみる
個人的な話になりますが、私は単発銃より
高レートで連射できる銃の方が好みです。
First Personテンプレートの銃...単発じゃないか!
というわけで、今回はあまり手間をかけずに
FPSテンプレートの銃を連射できるようにしたいと思います。
準備
今回はUE4 4.13.3を使用します。
適当なFPSテンプレートを作成してください。
処理を書く
First Person Character BPを開きます。
銃弾を生成する部分の全体図です。
コメントを消して、Touch関連のノードを削除していますが、
95%くらいテンプレートのままです。
変更した箇所を順番に見ていきます。
変数を一つ作成します。
銃のトリガーを引き継づけているかのフラグです。
InputAction Fireのすぐ隣にこのような処理を組みます。
一度Pressedに入るとReleasedに入るまで、
フラグをTrueのままにしておく処理です。
Branchの後には、テンプレートに最初から書かれている
Montage Play→Spawn Actor→Play Sound At Locationと
流れています。
Play Sound At LocationのあとにDelayを書きます。
このDelayは連射間隔を制御するものです。
0に近いほど高速で連射します。
Delayを最初の方に書いたBranchと繋げ
処理は完了です。
次に弾の方も少し変更したいと思います。
First Person Projectileを開いてください。
デフォルトでは弾が大きいので、
MeshのSphereをx,y,zすべて、
0.05にしました。
ブループリントはテンプレートに書かれている
Event HitとDestory Actor以外を削除し、
このように書いてください。
弾が何かに当たると当たった物のログを表示し、
消滅するという処理です。
以上で完成です。
挙動を見てみる
うまくいけばこのように、
少しの処理で連射できる銃を作成することができます。
※Meshの描画がおかしいのは気にしないでください。
私の環境の悲しみスペックPCはUE4を動かせるのか
前のブログにも書きましたが、
諸事情により今まで使っていたPCが
消滅しました。
このままではブログが書けない!
あと色々支障が出る!
ということで、諸事情の際に
売値がつかず放置していたPCを
クリーンインストールして使ってみます。
結論から言いますと動きませんでした。
それでも、もし動かせたら面白いよねとか思いながら、
スクショを撮ったので書くだけ書きます。
私のPCのスペック
公式が謳っている推奨スペックがこちら
そして私のPCのスペック
思わずため息が出ました。
まぁ今はこのPCしかないし...
頑張ってほしいところです。
UE4をインストールする
この画面を久しぶりに見た気がしました。
Launcherのインストール自体は割と早く終わりました。
この勢いに乗ってエンジンもサクッとインストールします。
しました。
2時間くらいかかりました。
UE4を立ち上げてみる
なんやかんやで、インストールも無事終わり、
立ち上げてみます。
遅いっ!
一人称視点のテンプレートを立ち上げました。
比較用に今のFPSを見たいと思います。
・・・ふむ
FPSが2しかありません。
初めて見た気すらします。
この段階で無理が見えてきました。
ひとまず、いろいろ軽量化を図ります。
拡張機能の設定がEpicになっていたので
これを低に落とします。
アンチエイリアスを切ります。
マテリアル品質レベルを下げます。
描画レベルをモバイル向けにします。
PCの解像度を多少下げます。
・
・
・
これでマシになっていることを祈りつつ、
再びFPSを確認します。
これは酷い・・・
まだ試していない軽量化がありますが、
PCがフリーズしたので、
ここで検証を終了します。
まとめ
・私のPCではUE4は動かない。
VRもやりたいので、
早急にVRReadyを確保する必要がありそうです。
・・・泣きそう。
グローバルゲームジャム2017に参加してきました。
こんばんわ。
UE4が動作するPCが諸事情により消滅し、
悲しみに打ちひしがれているMozPacaです。
GGJ2017参加してきました。
GGJ 2017 バンタン大阪会場の集合写真!#ggj17jp #ggjOsaka pic.twitter.com/hSUvmir2Z4
— alwei (@aizen76) 2017年1月22日
今年もバンタンゲームアカデミー大阪校の会場にお邪魔してました。
もう一つの大阪会場の変更などの原因で人が流れてきてたのか、
会場が50人以上の参加者でひしめいていました。
(HoloLens素敵でした。)
今回はチーム分けの段階で、ほとんどのチームが
VRゲームの開発を行うと言っていましたね。
(みんな機材持参でした。すごい!)
流石にVR以外のチームがあった方がいいのではということで、
Iチームのチームリーダーに立候補しました。
後々,チームメンバーに聞いてみたら全員が
VRがやりたかったという笑い話付き。
実際に作ったもの
バケモンです。バケモン。
ポ〇モンじゃないです。
β版と完成版の生放送で両方とも言い間違えたけど、
ポ〇モンじゃないです。
ルールとしては、
・マップ内を歩き回る。
・半透明の敵を見つける。
・バケモンボールをぶつける。
・敵がGET(消滅)できる。
・敵を9体GETできたらクリア。
という感じです。
レベルデザイン頑張ってますね。
(私はやってない)
マップだけみたら普通にゲームです。
バケモンボールも思った以上に飛ばしやすいです。
(私はやってない)
AIもマップ内を自由に歩き回るので、なかなか楽しめます。
(私はやってない)
タイトル画面のロゴとか完璧ですよね。
(私はやってない)
Widgetもシンプルでいい感じです。
(私はやってない)
お前なにやってんだよ
・・・音周りやりました。
敵に音を適応し忘れるガバガバ作業です。
本当にすいませんでした。
それは置いといて
GGJの参加は2回目なのですが、
去年に比べたら私も仕事してるフリが
うまくなったのを実感しています。
来年こそはバリバリできる人になりたい。
3日間お疲れさまでした。
来年もよろしくお願いします。
UE4 多分一番簡単なヒットエフェクトの作り方
去年あたりからゲームジャムによく参加している気がします。
その際に有料アセットでは雰囲気に合わず、
自分で作るにも時間がかかりそうということがよくあります。
そんなときに私が手抜きでつくるパーティクルのメモです。
4.13.2で作成していきます。
補足
今回はStarter ContentsのAssetを使用します。
既存プロジェクトなどでStarter Contentsを入れていないという方は
左下のAdd NewからAdd Feature or Content Packを選択してください。
次にContents PacksタブからStarter Contentsを選択後、
Add to Projectをクリックしてください。
これで現在のプロジェクトにStarter Contentsが導入されます。
準備
このプロジェクトでは、FPSテンプレートを使用しています。
FPSテンプレートでなくても全然問題ないです。
今回はこのテクスチャを使用します。
Starter Contents→Textures→T_Spark_Core
Starter ContentsのSparkパーティクルに使用されているテクスチャです。
マテリアルを作成する
先ほどのT_Spark_Coreを使用してマテリアルを作成します。
右クリック→Materialを選択します。
マテリアルに適当な名前を付けましょう。
作成したマテリアルを開き、
Blend ModeをAdditive
Shading ModelをUnlitにします。
Texture SampleノードにT_Spark_Coreを割り当て、
Particle Colorと乗算しつつ、このようにつなげます。
マテリアルはこれで完成です。
パーティクルを作成する
次にパーティクルの作成を行います。
右クリック→Particle Systemを選択します。
名前は適当に。
作成したパーティクルを開いてください。
初期の状態ではこのようになっていると思います。
パラメータを編集する
右側のパラメータを編集します。
Initial Velocityを削除し、
Initial Rotation、Light、Size By Lifeを追加しましょう。
Requiredを選択し、先ほどを作成したマテリアルを選択します。
Emitter Loopsを0から1に変更します。
次にSpawnパラメータを編集します。
Rateを大体300前後にします。
実際に動かしてからまた微調整するので、少し大きくします。
Life Timeパラメータの編集をします。
min 0.05秒、max 0.1秒に設定します。
最後にInitial Sizeパラメータの設定をします。
大きさは1000にしました。(画像は100ですが)
今回は分かりやすくするために大きくしましたが、
通常であれば300ほどで十分だと思います。
あとは、環境に合わせてパラメータを変更してください。
また、Color Over Lifeのパラメータを変更することで、
パーティクルの色を変えることも可能です。
パーティクルを発生させる
とりあえず、弾が何かにぶつかった際に発生させようと思います。
FirstPersonBP→First Person Projectileを開いてください。
Event HitからSpawn Emitter at Locationで
先程作成した、パーティクルを発生させます。
見てみる
全体的にパーティクルパラメータを微調整しています。