原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【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

 

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。