WebsiteStaffsNEWSAiriGoutaKuuShinnosukeSho-kichiReonYoshiaki2016-10-21UE4で複雑な足音を鳴らす!blog.i-fromjapan.comこんばんは!ヨシサブロウです最近、レベルデザインをやっていましてなかなかプログラムの記事がかけなくてすみません。今回は様々な状況の複雑な足音を鳴らす方法を書いていきます。足音の変化プログラム単純な地面によって変わる足音の鳴らし方はいろいろな所で紹介されているので、そちらを参考にしてください!ただ地面で足音が変わるだけじゃ嫌なんだ!落ち葉を踏んでいるとかビニール袋を踏んでいるとかでも音を変えたいんだ!という人向けの記事です。地面によって変えるだけのプログラムもこれを読めば書けるようにはなると思いますが。どんな足音を鳴らしていくのかと言いますとどんな種類の靴を履いているのかプレイヤーの体重はどれぐらいなのか武器の重さはどんな地形なのか(コンクリート、土、砂など)何の上を踏んだのか(落ち葉、枯れ枝、ゴミ、ビニール袋など)これを全てひっくるめた足音を鳴らしていきます。前提条件として僕は、音の混ぜ合わせはサウンドディレクターの藪本くんにWwiseの方で処理をしてもらっています。Wwise:サウンドミドルウェアです。無料で、ある程度まで使えるので音をゲームに入れるならば絶対に使ったほうがいいです!導入方法はこちらの記事にあります。blog.i-fromjapan.com僕のブログでも連携方法を紹介していきます!それでは早速まずは、どんな地形を踏んでいるのかの判断の方法から説明していきます。(簡易足音の実装はこれだけで十分です)地形に当てているマテリアルに物理マテリアルを追加していきます。本来、物理マテリアルはその物理マテリアルが設定されているオブジェクトの摩擦力や反発力などを設定できる物なのですが今回は物理マテリアルに設定する事ができる”サーフェイスタイプ”を読み取ることでどんな地形なのかを判別していきます。サーフェイスタイプは、コリジョンのオブジェクトタイプみたいな感じで色々種類を分けるために使う物ですオブジェクトタイプなどと同様にプロジェクト設定からサーフェイスタイプを追加していきます。ここに好きに設定してください!Wwiseとの連携を考えると英語で設定したほうが無難です。コンテンツブラウザーで物理マテリアルを作ってサーフェイスタイプを設定してください。これをそれぞれの地形のマテリアルに設定していってください。これで地形の方のセットはおしまいです。このサーフェイスタイプを取得するにはLineTraceでちょちょっとできますTraceTypeはVisibilityで大丈夫です。Typeで何を踏んでいるかを確かめます。これで取得ができるようになりました。!!複雑な足音を鳴らしたい貴方はLineTraceByChannelではなくMultiLineTraceByChannelを使ってください同時にいろいろ踏み踏みしているときでもコイツで判断していきます。何を踏み踏みしているのかはまた、それぞれのオブジェクトに物理マテリアルを適応させるだけで大丈夫です。それをそのままTraceで検知してしまうと*ペンタブをいただいたのでウキウキで使ってます。基本となる地形マテリアルを決めておいてそのマテリアルを検知したらそれより下のマテリアルは検知しないようにします。今回ならば岩と土を基本地形マテリアルにしておけば岩を通過した時点で土は検出されません。Arrayはマテリアルのサーフェイスタイプの配列です。このCheck_Surfaceで基本地形マテリアルかどうかをチェックしています。変態マクロマンなので、またマクロを使っています。Check_Surfaceの中身です。石を基本地形として、それらのどれかが来たらマクロSetSurfaceを実行して先程のLoopをBreakしています。変数GroundTypeについては後述。マクロSetSurfaceも後ほど公開します。これで、基本岩と土が一緒に鳴ることはなくなりました。次に音の構成に入っていきます。大まかに分けると音はみたいな感じに鳴っています。*体重の重さで、靴の音や地面の音の種類そもそもを変えたりなどしていますが。基本地形で判断して一つの音を鳴らしています。踏んでいるモノをそれぞれ鳴らしています。それぞれの音を決定する時に体重を参考にして決定していくとどんな状態の足音でも鳴らすことができます。(簡単にするならば、体重で音量を変えるだけでも大丈夫ですが、ある程度の体重ごとに音を分けたほうがリアルです)音を同時にならすのはWwiseでやるとすごく綺麗になります。サウンドキューを使えばできると思います。(あまり使った事が無いので要検証です)それでは以上を踏まえた上で全体のプログラムの説明に入っていきます。*Wwiseで鳴らす事を前提として書いていますが、仕組みがわかればUE4だけで完結させることができますのでわかりやすいように書いていきます。思ったのですが、プログラムの全体図がまず見れたほうがわかりやすいですよね。今までのやつも全体図上げていきますね*僕のWwiseが少し調子が悪くて連携テストができていないのでちょこちょこWwiseの所は変わるかもです。変わったら記事にします赤で囲っているのはWwise特有のイベントです。何をしているかの説明を書くのでUE4のみでもできると思います。あ、これスペル間違えてますねCheckマクロSet_Surfaceそれでは説明していきます。入れ込んでいます走っているアニメーションからの通知を受けた時にプレイヤーの総体重をSetRTPCValueします。SwitchはWwiseに靴の名前を送っているだけなのでUE4のみの場合はここで靴の音をサウンドキューに設定してください。LineTraceですね。LineTraceが出る若干のズレが気になる方は上の2つをLineTraceの後に持ってきても大丈夫です。Arrayで綺麗にしてからTraceにHitしたモノを回していきます。Check_Surfaceしていきましょう基本地形が当たった場合だけ、それをGroundTypeに格納してからSetSurfaceをしてこのループをブレイクさせます。それ以外の場合はSetSurfaceに直行です(あれ、マクロの外に出す必要無かったな・・・変えておこう)SetSurfaceではまずは、今当たったモノがもうすでに配列GroundsArrayに格納されていないかどうかを調べます。格納されていない場合のみ、GroundsArrayに格納してそれをWwiseに送ります。*Wwiseを使わない場合は配列にサーフェイスをNameに変えて入れてまとめて再生してください。やり方は後述PrintStringでは今踏んだモノを出力しています。ループが終了したらGroundTypeの中に入っている基本地形をWwiseに教えます。UEのみの場合はこれをBoolでまた分けてサウンドキューに教えます。最後にすべてを再生します。EventですがUE4ではここらへんのノードとBoolなどでお願いします。AudioComponentです。音を混ぜ合わせる時はWwiseをおすすめします。言うより音はやはりWwiseの方が良いと思います。Tumblr関連記事2017-02-15今日も一日ゲーム作り!「Delayを用いた音響」(2017/02/15)サイコダイブという、心理解析によって選出される自分だけの武...2017-02-13今日も一日ゲーム作り!「モーションブレンドプログラム」サイコダイブという、心理解析によって選出される自分だけの武...2016-10-20【Wwise】ループとクロスフェード処理こんばんは。技能検定レポートこんばんは。月別アーカイブはてなブログをはじめよう!ifromjapanさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。