Unity事例ノート

UNITY

デリゲートを使ってn秒後に実行

他のオブジェクトにある関数を実行する際、スクリプトの管理をわかりやすくするため、デリゲートを使用してみます。

Sphere側のスクリプトで1秒経過した後、Cubeにカラーが青に変わります。

はじめに、デリゲートを使わないでスクリプトを作成。

その後、デリゲートを使ってスクリプトを書き直してみましょう。

関連記事:
出現してから1秒後に落下する
Invokeを使ってn秒後に関数を実行する
相手が動いている間、プレーヤーを動けなくする
数秒後にオブジェクトを出現させる
コルーチンを使って1秒後にテキストを消す
触れた相手をn秒後に削除する
乗ったオブジェクトをn秒後に消す
ぶつかればn秒間ストップ

デリゲートを使わないケース

他のオブジェクトの関数を実行する際、まずは、よくある方法で作成してみましょう。

CubeとSphereを作成し、横並びに配置します。

GameManager.csをCubeに追加し、SphereScript.csをSphereに追加します。

GameManager.csを記述します。

SphereScript.csを記述します。

Sphereを選択し、GameManagerのフィールドに、Cubeを入れます。

ゲームプレイしてみましょう。

1秒後に、Cubeが青色に変わります。

デリゲートを使ったケース

この動きを、デリゲートを使って書き換えてみましょう。

SphereScript.csのほうから書き換えます。

TimeUpという名前で型を作成し、これを使ってtimeUpという変数をつくっています。

1秒後にtimeUpが実行されます。

このtimeUpの中に、Cube側で関数を登録していきます。

次は、GameManager.csを書き換えましょう。

SphereScriptのフィールドに、Sphereオブジェクトを入れます。

ゲームプレイしてみましょう。

1秒後に、Cubeが青色に変わります。

sphereScript.timeUp += ChangeColor; により、ChangeColor()の関数を登録しています。

timeUpが実行されたタイミングで、そこに登録されているChangeColor()が実行されます。

実行結果は同じなのですが、デリゲートを使うことで、Cube側(GameManager.cs)で、他のスクリプトを管理できます。

コード記述が多くなってくると、このように管理用のスクリプトから、内容を把握できたほうが、見た目がわかりやすくなります。

関連記事:
出現してから1秒後に落下する
Invokeを使ってn秒後に関数を実行する
相手が動いている間、プレーヤーを動けなくする
数秒後にオブジェクトを出現させる
コルーチンを使って1秒後にテキストを消す
触れた相手をn秒後に削除する
乗ったオブジェクトをn秒後に消す
ぶつかればn秒間ストップ