UE4初心者が頑張ってるブログ

Unreal Engine4を使用した開発メモ、及びそれに関連することについて不定期に書いています。

UE4 銃の弾が壁などに衝突した際の弾痕を実装する

現実の世界では銃弾が壁に当たると

ちょっと削れますよね?

 

今回はその弾痕の処理を実装します。

 

参考にしたサイトはこちら

gametukurikata.com

 

ベクトルの計算を使用していますが、

こちらのサイトに詳しく解説されています。

qiita.com

 

ではやっていきます。

 

準備

UE4 4.13.3を使用します。

f:id:MozPaca:20170128012413p:plain

 

FPSテンプレートでプロジェクトを作成してください。

f:id:MozPaca:20170128012508p:plain

 

使用する弾痕のテクスチャを用意します。

f:id:MozPaca:20170128073105p:plain

※256x256の.pngです。

 

テクスチャを用意したら、

プロジェクトにインポートしてください。

f:id:MozPaca:20170128073405p:plain

(鮮やかだなぁ...もっと暗い色にすればよかった)

 

必要なものを揃える

読み込んだテクスチャを右クリックします。

Sprite Actions→Create Spriteを選択してください。

f:id:MozPaca:20170128073505p:plain

 

Spriteが作成されます。

f:id:MozPaca:20170128073629p:plain

 

次に弾痕用のブループリントを作成します。

コンテンツブラウザを右クリック→Blueprint Classを選択します。

f:id:MozPaca:20170128073809p:plain

 

親クラスはActorを選択します。

f:id:MozPaca:20170128073916p:plain

 

作成したブループリントを開いてください。

f:id:MozPaca:20170128074001p:plain

 

まずはコンポーネントを追加します。

左上の方にあるAdd Componentから

Paper Spriteを追加してください。

f:id:MozPaca:20170128074137p:plain

(Spriteと入力して出てくる下の方です)

 

追加したPaper Spriteを選択し、

パラメータを変更していきます。

Source Spriteに先ほどインポートしたテクスチャを入れます。

f:id:MozPaca:20170128074322p:plain

 

少しテクスチャが大きいので、Scaleを0.1にします。

RotationのZ軸を90にします。

f:id:MozPaca:20170128074444p:plain

 

弾痕自体にはCollisionも不要なので

Block AllからNo Collisionに変更しておきます。

f:id:MozPaca:20170128074458p:plain

 

これで必要なものは揃いました。

 

処理を書く

まずは角度が取れているかを確認します。

FPSテンプレートに入っている

First Person Projectileを開いてください。

f:id:MozPaca:20170128074839p:plain

 

弾の衝突座標から衝突面に垂直な

長さ90のLine Traceを出します。

f:id:MozPaca:20170128074948p:plain

※確認用の処理です。弾痕を描画するだけなら、この処理は必要ありません。

 

このように衝突した平面から垂直なLine Traceが

確認できると思います。

www.youtube.com

 

次に描画するための処理を書いていきます。

先ほどのLine Traceの処理は削除しています。

f:id:MozPaca:20170128075441p:plain

Hit Locationから単に弾痕のブループリントを生成するだけでは、

オブジェクトにテクスチャが埋まってしまいます。

そこで、Hit Locationからカメラの向きベクトルを引くことで

少しだけ手前に生成しています。

 

RotationはLine Traceの処理で実装したVectorの処理を

Rotationで扱っているだけです。

 

これで一応描画はできるのですが、

弾痕がいつまでも残ってしまうので、

最後にBP_BreakEffectに処理を追加します。

f:id:MozPaca:20170128074001p:plain

 

これだけです。

生成されて5秒後に消える処理です。

f:id:MozPaca:20170128080007p:plain

 

以上で処理は終了です。

 

確認してみる

どの角度でも衝突相手の平面に張り付いて見えると思います。

www.youtube.com

 

※Spriteを少しいじったので

 上記の画像より暗く見えるのはそのためです。

 

余談

銃を連射しているのは前回のブログと

同じプロジェクトを使用しているからです。

参考までにどうぞ。

mozpaca.hatenablog.com

UE4 FPSテンプレートの銃を連射してみる

個人的な話になりますが、私は単発銃より

高レートで連射できる銃の方が好みです。

 

First Personテンプレートの銃...単発じゃないか!

 

というわけで、今回はあまり手間をかけずに

FPSテンプレートの銃を連射できるようにしたいと思います。

 

準備

今回はUE4 4.13.3を使用します。

f:id:MozPaca:20170128012413p:plain

 

適当なFPSテンプレートを作成してください。

f:id:MozPaca:20170128012508p:plain

 

処理を書く

First Person Character BPを開きます。

f:id:MozPaca:20170128012814p:plain

 

銃弾を生成する部分の全体図です。

f:id:MozPaca:20170128012917p:plain

コメントを消して、Touch関連のノードを削除していますが、

95%くらいテンプレートのままです。

 

変更した箇所を順番に見ていきます。

 

変数を一つ作成します。

f:id:MozPaca:20170128013201p:plain

銃のトリガーを引き継づけているかのフラグです。

 

InputAction Fireのすぐ隣にこのような処理を組みます。

一度Pressedに入るとReleasedに入るまで、

フラグをTrueのままにしておく処理です。

f:id:MozPaca:20170128013310p:plain

 

Branchの後には、テンプレートに最初から書かれている

Montage Play→Spawn Actor→Play Sound At Locationと

流れています。

 

Play Sound At LocationのあとにDelayを書きます。

このDelayは連射間隔を制御するものです。

0に近いほど高速で連射します。

f:id:MozPaca:20170128013612p:plain

Delayを最初の方に書いたBranchと繋げ

処理は完了です。

 

次に弾の方も少し変更したいと思います。

First Person Projectileを開いてください。

f:id:MozPaca:20170128013903p:plain

デフォルトでは弾が大きいので、

MeshのSphereをx,y,zすべて、

0.05にしました。

 

ブループリントはテンプレートに書かれている

Event HitとDestory Actor以外を削除し、

このように書いてください。

f:id:MozPaca:20170128014018p:plain

弾が何かに当たると当たった物のログを表示し、

消滅するという処理です。

 

以上で完成です。

 

挙動を見てみる

うまくいけばこのように、

少しの処理で連射できる銃を作成することができます。

www.youtube.com

※Meshの描画がおかしいのは気にしないでください。

私の環境の悲しみスペックPCはUE4を動かせるのか

前のブログにも書きましたが、

諸事情により今まで使っていたPCが

消滅しました。

 

このままではブログが書けない!

あと色々支障が出る!

ということで、諸事情の際に

売値がつかず放置していたPCを

クリーンインストールして使ってみます。

 

結論から言いますと動きませんでした。

それでも、もし動かせたら面白いよねとか思いながら、

スクショを撮ったので書くだけ書きます。

 

私のPCのスペック

公式が謳っている推奨スペックがこちら

f:id:MozPaca:20170124013538p:plain

 

そして私のPCのスペック

f:id:MozPaca:20170124012720p:plain

f:id:MozPaca:20170124012703p:plain

f:id:MozPaca:20170124012736p:plain

思わずため息が出ました。

 

まぁ今はこのPCしかないし...

頑張ってほしいところです。

 

UE4をインストールする

f:id:MozPaca:20170124013451p:plain

この画面を久しぶりに見た気がしました。

 

f:id:MozPaca:20170124013632p:plain

Launcherのインストール自体は割と早く終わりました。

この勢いに乗ってエンジンもサクッとインストールします。

 

しました。

f:id:MozPaca:20170124013716p:plain

2時間くらいかかりました。

 

UE4を立ち上げてみる

なんやかんやで、インストールも無事終わり、

立ち上げてみます。

f:id:MozPaca:20170124013931p:plain

遅いっ!

 

一人称視点のテンプレートを立ち上げました。

比較用に今のFPSを見たいと思います。

f:id:MozPaca:20170124014138p:plain

 

・・・ふむ

f:id:MozPaca:20170124014328p:plain

FPSが2しかありません。

初めて見た気すらします。

この段階で無理が見えてきました。

 

ひとまず、いろいろ軽量化を図ります。

f:id:MozPaca:20170124014546p:plain

拡張機能の設定がEpicになっていたので

これを低に落とします。

 

アンチエイリアスを切ります。

 

マテリアル品質レベルを下げます。

 

描画レベルをモバイル向けにします。

 

PCの解像度を多少下げます。

 

 

これでマシになっていることを祈りつつ、

再びFPSを確認します。

f:id:MozPaca:20170124014902p:plain

これは酷い・・・

 

まだ試していない軽量化がありますが、

PCがフリーズしたので、

ここで検証を終了します。

 

まとめ

・私のPCではUE4は動かない。

 

VRもやりたいので、

早急にVRReadyを確保する必要がありそうです。

・・・泣きそう。

グローバルゲームジャム2017に参加してきました。

こんばんわ。

UE4が動作するPCが諸事情により消滅し、

悲しみに打ちひしがれているMozPacaです。

 

GGJ2017参加してきました。

 

 

今年もバンタンゲームアカデミー大阪校の会場にお邪魔してました。

もう一つの大阪会場の変更などの原因で人が流れてきてたのか、

会場が50人以上の参加者でひしめいていました。

 

(HoloLens素敵でした。)

 

今回はチーム分けの段階で、ほとんどのチームが

VRゲームの開発を行うと言っていましたね。

(みんな機材持参でした。すごい!)

 

流石にVR以外のチームがあった方がいいのではということで、

Iチームのチームリーダーに立候補しました。

 

後々,チームメンバーに聞いてみたら全員が

VRがやりたかったという笑い話付き。

 

実際に作ったもの

バケモンです。バケモン。

ポ〇モンじゃないです。

β版と完成版の生放送で両方とも言い間違えたけど、

ポ〇モンじゃないです。

www.youtube.com

ルールとしては、

・マップ内を歩き回る。

・半透明の敵を見つける。

・バケモンボールをぶつける。

・敵がGET(消滅)できる。

・敵を9体GETできたらクリア。

という感じです。

 

レベルデザイン頑張ってますね。

(私はやってない)

マップだけみたら普通にゲームです。

 

バケモンボールも思った以上に飛ばしやすいです。

(私はやってない)

 

AIもマップ内を自由に歩き回るので、なかなか楽しめます。

(私はやってない)

 

タイトル画面のロゴとか完璧ですよね。

(私はやってない)

 

Widgetもシンプルでいい感じです。

(私はやってない)

 

お前なにやってんだよ

・・・音周りやりました。

敵に音を適応し忘れるガバガバ作業です。

本当にすいませんでした。

 

それは置いといて

GGJの参加は2回目なのですが、

去年に比べたら私も仕事してるフリが

うまくなったのを実感しています。

 

来年こそはバリバリできる人になりたい。

 

3日間お疲れさまでした。

来年もよろしくお願いします。

UE4 多分一番簡単なヒットエフェクトの作り方

去年あたりからゲームジャムによく参加している気がします。

その際に有料アセットでは雰囲気に合わず、

自分で作るにも時間がかかりそうということがよくあります。

 

そんなときに私が手抜きでつくるパーティクルのメモです。

 

4.13.2で作成していきます。

f:id:MozPaca:20161206120603p:plain

 

補足

今回はStarter ContentsのAssetを使用します。

既存プロジェクトなどでStarter Contentsを入れていないという方は

左下のAdd NewからAdd Feature or Content Packを選択してください。

f:id:MozPaca:20161218205118p:plain

 

次にContents PacksタブからStarter Contentsを選択後、

Add to Projectをクリックしてください。

f:id:MozPaca:20161218205249p:plain

これで現在のプロジェクトにStarter Contentsが導入されます。

 

準備

このプロジェクトでは、FPSテンプレートを使用しています。

FPSテンプレートでなくても全然問題ないです。

f:id:MozPaca:20161218204620p:plain

 

今回はこのテクスチャを使用します。

Starter Contents→Textures→T_Spark_Core

f:id:MozPaca:20161218205602p:plain

Starter ContentsのSparkパーティクルに使用されているテクスチャです。

 

 マテリアルを作成する

先ほどのT_Spark_Coreを使用してマテリアルを作成します。

右クリック→Materialを選択します。

f:id:MozPaca:20161218210546p:plain

 

マテリアルに適当な名前を付けましょう。

f:id:MozPaca:20161218210744p:plain

 

作成したマテリアルを開き、

Blend ModeをAdditive

Shading ModelをUnlitにします。

f:id:MozPaca:20161218210759p:plain

 

Texture SampleノードにT_Spark_Coreを割り当て、

Particle Colorと乗算しつつ、このようにつなげます。

f:id:MozPaca:20161218210910p:plain

マテリアルはこれで完成です。

 

パーティクルを作成する

次にパーティクルの作成を行います。

右クリック→Particle Systemを選択します。

f:id:MozPaca:20161218211132p:plain

 

名前は適当に。

f:id:MozPaca:20161218211355p:plain

 

作成したパーティクルを開いてください。

初期の状態ではこのようになっていると思います。

f:id:MozPaca:20161218211446p:plain

 

パラメータを編集する

右側のパラメータを編集します。

Initial Velocityを削除し、

Initial Rotation、Light、Size By Lifeを追加しましょう。

f:id:MozPaca:20161218211520p:plain

 

Requiredを選択し、先ほどを作成したマテリアルを選択します。

f:id:MozPaca:20161218211833p:plain

 

Emitter Loopsを0から1に変更します。

f:id:MozPaca:20161218211704p:plain

 

次にSpawnパラメータを編集します。

Rateを大体300前後にします。

実際に動かしてからまた微調整するので、少し大きくします。

f:id:MozPaca:20161218211753p:plain

 

Life Timeパラメータの編集をします。

min 0.05秒、max 0.1秒に設定します。

f:id:MozPaca:20161218212313p:plain

 

最後にInitial Sizeパラメータの設定をします。

大きさは1000にしました。(画像は100ですが)

今回は分かりやすくするために大きくしましたが、

通常であれば300ほどで十分だと思います。

f:id:MozPaca:20161218212452p:plain

あとは、環境に合わせてパラメータを変更してください。

また、Color Over Lifeのパラメータを変更することで、

パーティクルの色を変えることも可能です。

 

パーティクルを発生させる

とりあえず、弾が何かにぶつかった際に発生させようと思います。

FirstPersonBP→First Person Projectileを開いてください。

f:id:MozPaca:20161218212730p:plain

 

Event HitからSpawn Emitter at Locationで

先程作成した、パーティクルを発生させます。

f:id:MozPaca:20161218213018p:plain

 

見てみる

全体的にパーティクルパラメータを微調整しています。

www.youtube.com

 

UE4 死亡時のエフェクトとかを考えてみる

最近、HITというゲームを始めました。

mobile.nexon.co.jp

 

このゲームはUE4製らしいからという理由でインストールしたのですが、

サクサク動くし、グラフィックも綺麗でなかなか楽しんでます。

 

本題

今回は敵が消滅する際のエフェクトを作ります。

Destoy Actorでポンッって消えるのはちょっと寂しいですからね。

 

UE4のバージョンは4.13.2でやります。

 

準備

プロジェクトを作成します。

f:id:MozPaca:20161206120603p:plain

 

プロジェクト名は適当にTPSテンプレートで作成します。

f:id:MozPaca:20161207144714p:plain

 

Material Functionを作成する

今回のエフェクトはマテリアルを使って表現します。

また、様々な種類の敵のマテリアルに適応するため、

メインの処理はMaterial Functionで作成しましょう。

 

コンテンツフォルダ右クリック → Material & Textures → Material Function

f:id:MozPaca:20161212124605p:plain

 

名前はこんな感じにしました。

f:id:MozPaca:20161212125037p:plain

 

こんな感じに組みます。

ここでEmissive ColorとOpacityMaskに

それぞれOutputできるように作成します。

f:id:MozPaca:20161212131819p:plain

必要に応じてパラメータを追加してください。

 

Material Functionを適応させる

作成したMaterialFunctionを使用するマテリアルに適応させます。

今回はグレーマンにエフェクトをかけたいので、

レーマンのマテリアルであるM_UE4Man_Bodyに

Material Functionを追加します。

f:id:MozPaca:20161212132326p:plain

 

レーマンにはもう一つM_UE4Man_ChestLogoという

マテリアルがありますが、これについては後ほど。

f:id:MozPaca:20161212132524p:plain

 

M_UE4Man_Bodyを開いてください。

f:id:MozPaca:20161212132845p:plain

 

右クリックからMaterial Function Callを呼び出します。

このノードはMaterial Functionを呼び出すためのノードです。

f:id:MozPaca:20161212133149p:plain

 

このノードに先ほど作成した、MFunc_Dissolveを入れます。

これでMaterial Functionで出力したEmissive Colorと、

Opacity Maskが使えるようになります。

f:id:MozPaca:20161212133249p:plain

 

M_UE4Man_BodyマテリアルはUse Material Attributesに

チェックが入っているため、やや特殊な形をしていますが

チェックを外してこのようにしましょう。

f:id:MozPaca:20161212133724p:plain

 

これでこのマテリアルはMaterial Functionで作成した

パラメータなどが扱えるようになります。

 

Material Instanceにしておく

今回作成したパラメータなどはMeshのサイズや形に依存してしまうため、

Material Instanceを作成し、あらかじめ調整できるようにしておきましょう。

 

Instanceにしたいマテリアルを右クリック→

Create Material InstanceでMaterial Instanceが作成されます。

f:id:MozPaca:20161212134110p:plain

 

このようになります。

先ほど記述したM_UE4_Man_ChestLogoはすでに

Material Instanceのため、このまま使用します。

f:id:MozPaca:20161212134207p:plain

 

Material Instanceでパラメータの調整をする

作成したMaterial Instanceを開き、

Meshの形状に合うようにパラメータを変更します。

 

今回はこんな感じにしてみました。

M_UE4Man_Body_Inst

f:id:MozPaca:20161212134442p:plain

 

M_UE4Man_ChestLogo

f:id:MozPaca:20161212134750p:plain

 

パラメータを時間で変更させる

作成したMaterial FunctionにはTimeノードなどを使用した

時間で何かするという処理は入っていません。

 

ですので、別のところでパラメータを変更させる必要があります。

 

まずはThird Person Characterのブループリントを開きます。

f:id:MozPaca:20161212135245p:plain

 

変数を一つ追加します。

Dynamic Material Instanceでパラメータを変更させるためのものです。

戻り値はMaterial Instance Dynamicで配列化しておきます。

f:id:MozPaca:20161212135341p:plain

 

そして、Construction Scriptで処理をこのように書きます。

Meshで使用しているマテリアルをすべて

Dynamic Material Instanceとして作成し、変数に格納しています。

f:id:MozPaca:20161212135519p:plain

 

次にイベントグラフに処理を書きます。

カスタムイベントからタイムラインにつなげ、

時間によってパラメータを変更します。

タイムラインの処理が終了すると、

Destroy Actorに流れるようにしておきます。

f:id:MozPaca:20161212135740p:plain

 

タイムラインはこんな感じです。

f:id:MozPaca:20161212140030p:plain

 

エフェクトを発生させる

任意のタイミングで発生できるように

カスタムイベントを作成したので、

適当なタイミングで呼び出したいと思います。

 

今回はこの死亡アニメーションが終了して、

0.2秒後にエフェクトを発生させましょう。

f:id:MozPaca:20161207151150p:plain

 

まずは、このアニメーションを開き

アニメーションの終了時に通知を追加します。

f:id:MozPaca:20161212140544p:plain

 

次に、このアニメーションを組み込んだ

アニメーションブループリントを開きましょう。

f:id:MozPaca:20161212140851p:plain

 

先ほど作成した通知イベントから、このように処理を書き

エフェクト発生用のイベントを呼び出します。

f:id:MozPaca:20161212141008p:plain

 

これで処理は完成です。

 

再生してみる

今回はPキーを押すとアニメーションが流れるようにしました。

www.youtube.com

 

すこし、粗が見えますね。

パラメータの微調整が必要そうです。

UE4 Procedural Midiをちょこっと分析して使ってみる

この記事は裏Unreal Engine 4 (UE4) Advent Calendar 2016への参加7日目の記事です。

qiita.com

 

※ページの最後に作成したプロジェクトの共有リンクを張っておきます。

 プロジェクトを直に見たい方はそちらをご覧ください。

 

昨日(6日)はalweiさんのロケットパンチ講座でしたが、

unrealengine.hatenablog.com

 

今日(7日)はDTMで作成したMIDI(.mid)ファイルをUE4上で再生してみよう回です。

プロジェクトの作成から始めて、音を再生するところまで書きたいと思います。

Procedural Midiはまだ公式のドキュメントが無いようなので、

手探り状態でいろいろ試してみます。

 

最終的にはこんな感じになりました。

www.youtube.com

録画ソフトの影響で音が途切れて聞こえる箇所があります。

 

(グレーマンたちが手を繋いでるように見える)

 

一応補足

音源の作成、及び.mid書き出しには

Aria Maestosaを使用しています。

http://ariamaestosa.sourceforge.net/

フリーで使えて、機能も充分なので私のお気に入り。

 

DTM : PC上で音を作ること(打ち込み音楽とか言われてるアレ)

.mid : 大体のソフトで読み込めるスタンダードmidiファイルのこと

 

DTMMIDIの詳しい説明は自分で調べてください。

先に言っておきますが私はDTM超初心者です!

 

本題

今回はUE4のマーケットプレイスにある

「Procedural Midiプラグインを使います。

https://www.unrealengine.com/marketplace/procedural-midi?lang=ja

f:id:MozPaca:20161206110020p:plain

「エンジンにインストールする」をクリックして、

このプラグインを使用したいバージョンを選択しましょう。

インストール可能なバージョンは4.12~4.14までです。(2016年12月7日現在)

 

導入することでできるようになること

マーケットプレイスのテクニカルノートより引用

・Ability to Import/Play Midi.

 Midi(.mid)ファイルの読み込みと再生ができます。

・Create Audio Notes Procedurally.

 Midi音声ファイルをプロシージャとして作成します。

・Create Procedural Audio Note in Sound Cue Editor.

 Sound Cueエディタで作成したプロシージャを扱えます。

(英語読めないので、ミスがありましたら教えてください) 

 

プロジェクトの作成

では早速やっていきましょう。

私の環境では現在4.14.0が起動しないので、

ver.4.13.2でやっていきます。

f:id:MozPaca:20161206120603p:plain

 

インストール済みのプラグインをクリックし、

Pricedural Midiがインストールされていることを

確認してから作成しましょう。

f:id:MozPaca:20161206120652p:plain

(今回のプロジェクトではSubstance Pluginは使いません) 

 

名前などは適当に。

f:id:MozPaca:20161206121439p:plain

 

プラグインが有効になっているか確認する 

先ほどエンジンにプラグインがインストールされているかの確認をしましたが、

今度はそのプラグインが有効になっているかを確認しましょう。

 

Edit→Plaginを開きます。

f:id:MozPaca:20161206122616p:plain

 

Installed→Audio→Midi AssetのEnabledにチェックが入っていたら

有効になっています。もし、チェックが入っていなければチェックを入れましょう。

f:id:MozPaca:20161206122815p:plain

 

.midをインポートする

通常UE4は.midファイルをインポートすると

f:id:MozPaca:20161206122155p:plain

このように読み込めません。

 

しかし、Procedural Midiプラグインを有効にしている場合

f:id:MozPaca:20161206123234p:plain

インポートボタンもしくはドラッグ&ドロップで読み込んでくれます。

 

ちなみにMidiファイルの中はこのようになっています。

f:id:MozPaca:20161206145451p:plain

配列の中に鳴らすべき音を示す数値が格納されています。

 

ブループリント以外で必要なものを作成する

先ほどの動画ではグレーマンが発光していましたが、

発光させるために必要なMeshとMaterialなどを準備したいと思います。

 

MeshにはStarter Contentに収録されているShape_Cubeを使用します。

Static Meshであれば何でも大丈夫のようです。

(グレーマンは一度Static Meshに変換してから使いました)

f:id:MozPaca:20161206143452p:plain

 

次にマテリアルですが、

色の変化などはDynamic Material Instanceで行うので、

f:id:MozPaca:20161206143738p:plain

このように、Emissive ColorにVector Parameterを入れておくだけでいいでしょう。

f:id:MozPaca:20161206143835p:plain

 

処理を書いていく

まずはActor型のブループリントを作成してください。

このブループリントは再生や描画に必要な処理の親クラスとして作成します。

f:id:MozPaca:20161206124542p:plain

 

名前はこんな感じ

f:id:MozPaca:20161206192328p:plain

 

ではBP_Baseを開いてください。

コンポーネントに「MIDI Processor Component」を追加します。

f:id:MozPaca:20161206131244p:plain

 

このコンポーネントMidiの再生に使用するイベントや、

再生スピードを変えることができるようです。

f:id:MozPaca:20161206131500p:plain

 

変数を一つ作成します。

MIDI Asset型の変数です。

どうやらインポートしたMidiファイルは

この型の変数に格納できるようです。

とりあえず、先ほど読み込んでおいた.midをデフォルト値に入れておきましょう。

f:id:MozPaca:20161206132103p:plain

 

ノードを組みます。

開始時にMidiのセットアップの処理を書きます。

f:id:MozPaca:20161206185849p:plain

 

次にBP_Baseから継承したファイルを作成しましょう。

情報の受け渡しを行うBP_PLayerBaseを作成します。

f:id:MozPaca:20161206193435p:plain

f:id:MozPaca:20161206193403p:plain

 

これらのBaseファイルを使用するファイルを作成します。

BP_Baseから継承してBP_Playerを作成しましょう。

f:id:MozPaca:20161206193819p:plain

 

Material Dynamic Instanceを戻り値とした配列の変数を作成します。

f:id:MozPaca:20161206193834p:plain

 

開始時にMeshを指定個数作成し、

音が再生されるたびにランダムに色を変える処理を書きます。

f:id:MozPaca:20161206194007p:plain

レベルに配置する際はこのBP_Playerを配置してください。

 

生成されたBoxが指定個数(15個)並んだ様子

f:id:MozPaca:20161206210704p:plain

 

鳴らしてみる

このままBP_Playerをレベルに配置し、

Playボタンを押すとMidi Asset変数に格納している

MIDI音源が再生されます。

 

MIDI音源を再生するならここまでで終了です。

まだいろいろ機能がありそうなので調べてみたいと思います。

 

こんな感じになりました。

www.youtube.com

 

気づいたこと

 今回Procedural Midiを触ってみて気づいたことがあります。

・アフタータッチや、ピッチベンドがかけられる?

サンプルを見ると、これらの特殊効果についての

記述がありました。もしかすると特定の音に対して、

特殊効果をかけられるかもしれません。

 

DTM上でパートの数によって発光するBoxの数が違う。

これは私がAria Maestosaを使用して作成したものですが

見てのとおりパートはグランドピアノ一つです。

www.youtube.com

これをUE4上で再生すると

このようにBoxが一つしか発光しません。

www.youtube.com

 

楽器や特定の音域でBoxの担当があるのかと思い、

同じ楽器で二つのパートを作ってみました。

www.youtube.com

UE4で再生し確認したところ、どうやら違うようです。

こちらは二つのBoxが発光していました。

www.youtube.com

Boxの発光数はDTM上のパートの数で決まるようです。

Procedural Midiを使う際には、パートの多い音源をおすすめします。

 

・純粋に面白い

これ一番大事じゃないでしょうか。

一見どこで使うかわからないような処理が多いですが、

Midiのような特殊なものを扱うのは楽しいです。 

 

プロジェクトはアップロードしています

今回作成したプロジェクトは

Googleドライブにアップロードしていますので参考までにどうぞ。

MidiTestProject.zip - Google ドライブ

 

明日

明日(8日)はてんちょー(@shop_0761)さんの

水彩風マテリアルをつくってみる」です。

マテリアルは勉強中なのですごく楽しみです。