Unity事例ノート

UNITY

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

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

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

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

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





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

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

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)で、他のスクリプトを管理できます。

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