Time Synthに遊ばれた

#まえがき
この記事は[Unreal Engine 4 Advent Calendar 2020　その1](https://qiita.com/advent-calendar/2020/ue4)　22日目の記事です
Unreal Engine 4 Advent Calendar 初寄稿です
よろしくお願いします。

##自己紹介
はじめまして 柳 静(りゅう せい)と申します
かぶ小屋(kabgoya)は屋号です

UE4歴は約2年半です
**好きな人に振り向いてもらいたい**という不純な動機でUE4はじめました。

結局好きな人には振り向いてもらえずUE4だけが残り
UE4が仕事や友達を運んでくれたりして
気がつけばUE4が友達以上の存在になってしまいました。

##何について書かれているか
普段はミュージシャンやってることから
**多分サウンド系のこととか期待されるかもしれないな…**と思いました。

しかしそんなにすごいものを出せる自信がないので他のことを記事にしていましたが
どちらかというとnote向きの記事になってしまった気がしたので
最近はまってしまったTimeSynthについてこの記事を書き直しました。

このお話が上を見すぎて悩んでいる方たちの希望になればと思い
古いMacのキーボードを叩いています。

#本文
##TimeSynthとは
UE4.22からあるBeta版の機能です。

>TimeSynth (ベータ)
>TimeSynth は、サウンド デザイナーへ音声クリップのサンプルベースの正確な開始、停止、連結を提供することに重点を置いた、新しいオーディオ コンポーネントです。TimeSynth で、インタラクティブな音楽アプリケーションに不可欠な、正確で同期的なイベント オーディオとイベント キューが可能になります。
https://www.unrealengine.com/ja/blog/unreal-engine-4-22-released より

[Epic GamesのおかずさんのBlog](https://pafuhana1213.hatenablog.com/entry/2019/12/28/170856)や[ヒストリアさんのBlog](https://historia.co.jp/archives/12525/)を見て
**おもしろそう！**と思いプラグインをONにしたのは良いものの
そこが沼の入り口でした…

##イントロループに挑戦
２０１９年末・Epic GamesのおかずさんのBlogに書いてあったイントロループの記事を見て
うっかりイントロループの曲を書いてしまう自分に必要なものだと思ったので
まずは素材を作ってBPMをメモしてUE4を立ち上げました
そしてブループリントを組み始めたものの…

**ん？このノードどうやって出すん？**
![Introloop](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541757/b06a420d-83de-b5eb-e189-c4828d35d066.png)
(このとおりに組めないため、画像はおかずさんのブログからお借りしました。すみません…)

いくら調べても出し方のわからないノードがあり結局挫折しました…＿|￣|○
今なら落ち着いて調べれば出せるかもしれませんが…

##Twin Stick Shooterのカスタマイズに挑戦
次に挑戦したのは今年の11月・ヒストリアさんのBlogに書いてあったTimeSynthの使い方。
Twin Stick ShooterテンプレートにTimeSynthを使ってテンプレートををカッコよくするというものです。
今回は前回のトラウマもあり、うまくいったら自分の曲と差し換えようということで
音素材はヒストリアさんのブログからダウンロードして使わせていただきました。

###BGMのループ
前回の挫折から１年近く経っているので多少はブループリントが組めるようになっていましたから
なんとか普通のループをさせることに成功しました。

ここですこし複雑な気分になりました。
だって、普通のループならSoundWaveやSoundCueにチェックマーク入れれば簡単にループできるのに
なんでこんなに苦労してブループリント書かなきゃならんのだろうって…

**いや、ここで次に繋がる道があるんだからがんばろう**って
なんとか気持ちを持ち直しました。

###BGMとターゲットを連動させる
**BGMに合わせてターゲットが鼓動を打つような動きをする**という機能の実装に挑戦しました。
カスタムイベントの作り方や使い方がわからなかったものの比較的早く解決できすんなり追加できました。
空いているところにカスタムイベントを作ってノードを組み、呼び出してあげれば良かったのです。

しかしここにもどうしても解明できない点がありました。
**最後の青いピンがつながらない！**
互換性がないから接続できないとエラーが出ます
![BeatProduction.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541757/a4a16608-f444-65ef-8ceb-d71051818a17.png)
(このとおりに組めないため画像はヒストリアさんのブログのものをお借りしました。すみません…)
![MyIntroloop.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541757/24789328-ee3d-ecaf-0d82-4358dd920604.png)
自分の組んだノードはこちら

最後のBeatProductionノードの青いピンがPawnになっているからForEachLoopノードで分解したActorを受け付けないのが原因、というところまで突き止めましたが対処法がわかりません(´；ω；`)

![BeatProduction2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541757/eb858372-2746-b54c-9099-7926e170f061.png)
図のようにカスタムイベントにActorの入力を増やして強引に繋いでみたらエラー連発！

仕方ないので青いピンは繋がないままプレイしました。
すると…

![shootinganimation01](http://kabgoya.com/wp-content/uploads/2020/12/Shooting20201201-Unreal-Editor-2020-12-19-19-42-22.gif)
**あれ？UFOがノリノリで鼓動を打ってる???**
もうこうなったら笑うしかありません＾＾；

Beatを把握してアニメーションが動いているようなので
悔しいなぁと思いながらも気持ちを切り替えて次にチャレンジすることにしました。
(こういういい加減なところがよくないのかもしれませんが…)

###ターゲットを破壊すると音楽を鳴らす
そして**ターゲットを破壊するとにぎやかしの音楽がBGMと連動して鳴る**という機能の実装に挑戦しました。

TimeSynthClipの設定とターゲットのブループリントにPlayDestroyMelodyという
ヘビメタのアルバムにありそうな名前のカスタムイベントノードを作り組み込みました。

そしてDestroyActorノードの後ろにPlayDestroyMelodyを繋いでみたのですが

**…にぎやかしの音楽が鳴らない…**

Blogのムービーを何度も再生してタイミングを測ると
破壊から音楽が鳴るまでタイムラグがあるようでした。

![Target01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541757/49690236-f39e-6804-71c5-946b7a858e3c.png)

PlayDestroyMelodyをDestroyActorより前に移動、Delayノードで1秒遅らせることで
ようやくターゲットを破壊したらにぎやかしの音楽が鳴りました。
きっともっと上手い方法があるのかもしれませんが
**まずは鳴ればいい！**ぐらいの気持ちでやってるのでよしとすることにしました。
(こういういい加減なところが…以下略。)

##他にもいろいろ挑戦したかった
ビートごとに照明が変わるとか弾丸の出るタイミングを16ビートにしたいとかいろいろありましたが
いろいろわかってない点が多いうえ、他に覚えることがたくさんあるため実装を諦めました。
いろいろわかってきた時、TimeSynthがまだ残っていたらまた挑戦するかもしれません。

#まとめ
##TimeSynth難しい！でも使いたい！！
一年かけても使いこなせないのは自分がポンコツなせいもあるのかもしれませんがとにかく扱いが難しいです。
しかし音楽データを時間単位でなくBPM(1分間の拍数)やBar(小節)やBeat(拍)の概念で考えられるのは
楽譜慣れしているミュージシャンとしてはありがたいし使いこなせたら最高だと思います。

##あえて完璧を求めないスタイルで乗り切った
初めは**このぐらいできないと！**と過度に自分にプレッシャーをかけていましたが
あまりにも進まないため**このぐらいできたら褒めてあげよう**という気持ちにシフトしました。

##わからないところが自己解決できないときは？
どんなにググっても手元の本を何度も読み返してもわからないものはわかりませんでした。
ここに書いていること以外のことも何度もチャレンジしてエラーを吐き出して…の繰り返しです。
自分の場合、どうしてもできないことはそこでストップして次の作業へ移ります。
あまりにも自己憐憫が過ぎると体調や周りへの態度にまで出るからです。

はっきり言って自己解決できないのはとても悔しいけど、ここではあえて傷口をさらけ出してます。

#あとがき
今回の記事は**初心者歓迎**のひとことがなければ挑戦しませんでした。
なので中級者や上級者の方が読んでもこの記事は役に立たないかと思います。
だけど初級者の方に**たくさん失敗してもいい、恥かいてもいい**と思っていただければそれだけで本望です。

来年はずっとやりたかったARやVR・映像などのノンゲームの分野に挑みたいです。
xR業界は相変わらずUnityが使えないと就職やお仕事をもらうことなどは難しいですが
UnityにはトラウマがあるのでUnreal Engineでどこまで抗えるかやってみたいところです！

最後まで読んでいただきありがとうございましたm(_ _)m
**それではすてきなクリスマス&お正月を！**