予約購入
総選挙よりも予約購入したPixel6が楽しみな皆さんこんにちは。選挙期間中ということもあって案の定Twitterのトレンドは政治豚の下品なハッシュタグで汚染されていてウンザリですが、新しいスマホが届き次第ウキウキで写真を投稿してマウントを取りたいと思います。
タイムライン
ゲームを制作する途中で発生する数々の悩み事の一つに「ムービーシーンを制御するスクリプトが複雑になりがち」という悩みがあって、例えば以前Unity1Weekで投稿した「The two met」という作品などはゲーム本体よりもムービーシーンの制作の方に時間を取られて、それを制御するスクリプトは見事なぐらいのスパゲッティソース、見返すと無駄に長くて自分の技術力のなさにウンザリします。
Unityではそういった悩みを改善するために「タイムライン」という機能を有しており、ゲーム内の演出必要な「オブジェクトの表示/非表示」「サウンドの再生/停止」「アニメーションクリップの再生」「カメラの切り替え」等々の処理を任意のタイミングで行えるようにエディタ上で設定→再生で確認を行うことができるのですが、オブジェクトのTween等の処理には対応していないため個人的にはイマイチ痒い所に手が届かない機能でした。
しかしながら、調べてみると「Signal Receiver」というコンポーネントを使用すればタイムライン上に設定したイベントをスクリプト側でキャッチできるらしい。
イベントさえキャッチできれば、後はスクリプト内でオブジェクトのTween等の処理を行えばよいので随分と使い勝手が良くなります。スパゲッティソースを作る羽目にならずにすみそうです。
手順
最初にプロジェクト内の好き場所に「Signal」というリソースを作成します。
プロジェクトウィンドウ内で右クリック→CreateからSignalを選択します。
次にイベントをキャッチしたいオブジェクト側に「Signal Receiver」コンポーネントを追加します。
「Signal Receiver」はSignalの項目で設定したSignalリソースからイベント発行を受け取り、Reactionの項目に設定したスクリプトの関数へイベントを受け渡します。
Signalの項目で最初に作ったSignalリソースを選択し、Reactionの+ボタンを押下、このシグナルによって実行したいスクリプトの関数を選択します。
次にタイムラインでAddボタンを押し、「Add Signal Track」を選択してシグナルイベントを発行するトラックを作成、GameObjectには「Signal Receiver」コンポーネントを追加したオブジェクトを指定します。
最後にSignalリソースをタイムラインのシグナルトラックへドロップして発生させたいタイミングに設定します。
試してみる
今回はSignalリソースを二つ作成し、一つは「キャラクター(猫)の移動Tween開始」のタイミング用に使用し、もう一つは「オブジェクトのサイズ変更Tweenの開始」のタイミング用に使用しました。
それぞれのシグナルで以下のスクリプトが呼ばれます。
今まではこれを一つのコルーチン内で行っていたので、随分とソースコードが簡略化されたと思います。
実行結果はこんな感じ