以下の内容はhttps://www.karvan1230.com/entry/2021/10/26/201313より取得しました。


【Unity】タイムラインに設定したイベントをスクリプトでキャッチする

f:id:Karvan:20211026195345p:plain

予約購入

総選挙よりも予約購入したPixel6が楽しみな皆さんこんにちは。選挙期間中ということもあって案の定Twitterのトレンドは政治豚の下品なハッシュタグで汚染されていてウンザリですが、新しいスマホが届き次第ウキウキで写真を投稿してマウントを取りたいと思います。

 

タイムライン

ゲームを制作する途中で発生する数々の悩み事の一つに「ムービーシーンを制御するスクリプトが複雑になりがち」という悩みがあって、例えば以前Unity1Weekで投稿した「The two met」という作品などはゲーム本体よりもムービーシーンの制作の方に時間を取られて、それを制御するスクリプトは見事なぐらいのスパゲッティソース、見返すと無駄に長くて自分の技術力のなさにウンザリします。

unityroom.com

Unityではそういった悩みを改善するために「タイムライン」という機能を有しており、ゲーム内の演出必要な「オブジェクトの表示/非表示」「サウンドの再生/停止」「アニメーションクリップの再生」「カメラの切り替え」等々の処理を任意のタイミングで行えるようにエディタ上で設定→再生で確認を行うことができるのですが、オブジェクトのTween等の処理には対応していないため個人的にはイマイチ痒い所に手が届かない機能でした。

 

しかしながら、調べてみると「Signal Receiver」というコンポーネントを使用すればタイムライン上に設定したイベントをスクリプト側でキャッチできるらしい。
イベントさえキャッチできれば、後はスクリプト内でオブジェクトのTween等の処理を行えばよいので随分と使い勝手が良くなります。スパゲッティソースを作る羽目にならずにすみそうです。

 

手順

最初にプロジェクト内の好き場所に「Signal」というリソースを作成します。
プロジェクトウィンドウ内で右クリック→CreateからSignalを選択します。

f:id:Karvan:20211026195842p:plain

 

次にイベントをキャッチしたいオブジェクト側に「Signal Receiver」コンポーネントを追加します。
「Signal Receiver」はSignalの項目で設定したSignalリソースからイベント発行を受け取り、Reactionの項目に設定したスクリプトの関数へイベントを受け渡します。

f:id:Karvan:20211026200225p:plain

Signalの項目で最初に作ったSignalリソースを選択し、Reactionの+ボタンを押下、このシグナルによって実行したいスクリプトの関数を選択します。

 

次にタイムラインでAddボタンを押し、「Add Signal Track」を選択してシグナルイベントを発行するトラックを作成、GameObjectには「Signal Receiver」コンポーネントを追加したオブジェクトを指定します。

f:id:Karvan:20211026200600p:plain

 

最後にSignalリソースをタイムラインのシグナルトラックへドロップして発生させたいタイミングに設定します。

f:id:Karvan:20211026200621p:plain

 

試してみる

今回はSignalリソースを二つ作成し、一つは「キャラクター(猫)の移動Tween開始」のタイミング用に使用し、もう一つは「オブジェクトのサイズ変更Tweenの開始」のタイミング用に使用しました。

f:id:Karvan:20211026201008p:plain



それぞれのシグナルで以下のスクリプトが呼ばれます。

f:id:Karvan:20211026201022p:plain

 

今まではこれを一つのコルーチン内で行っていたので、随分とソースコードが簡略化されたと思います。
実行結果はこんな感じ

f:id:Karvan:20211026201106g:plain

 




以上の内容はhttps://www.karvan1230.com/entry/2021/10/26/201313より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14