2012年12月8日土曜日

[Unity]UnityScriptを動的に読み込む方法のメモ


UnityScriptを動的に読み込む方法のメモ



シーン毎に処理を分けたいがシーン毎に処理分けしてしまうと遅くなるので面倒。
スパイクチュンソフトさんがシーン毎にわけても遅くならないように作成した事例があったが、
シーン毎の管理方法を自作する必要があるので、それはそれで面倒。

⬇作成事例
http://www.slideshare.net/RyoheiTokimura/ss-14048278

◆目的

スクリプトでスクリプトを管理できれば一元化できる。


◆方法

めちゃくちゃ簡単。
作業の流れだけを記載するとこんな感じ。

シーン上(hierarchy)にcreate emptyで空のオブジェクトを生成
prefab化(Project内にドラッグ)
先ほど作成したオブジェクトをシーン上から削除
Project内にスクリプトを作成(言語問わず)
prefab化したオブジェクトに反映(ドラッグして)
先ほど作成したスクリプトに処理を実装
スクリプト管理用のスクリプトからprefab化したオブジェクトをクローン(Instantiate)する
スクリプトが実行される

あとは、各々のタイミングでオブジェクトを破棄したり新たに生成したりすればいい。


◆メッセージングによるメソッドの実行

SendMessageメソッドを使用すればクラス内のメソッドを実行できる。
BroadcastMessageメソッドを使用すれば階層構造下に存在する全てのオブジェクトに対して、クラス内にあるメソッドを実行できる。

ただし、メソッドが存在しない場合にはエラーが発生してしまうので、以下のオプションを付与するとよい。
今のところデメリットが分からないので、メッセージング機能を使用する場合はオプションを使用した方がいいだろう。
デバッグ時にわざとオプションを付けないようにするのも手かな。
SendMessageOptions.DontRequireReceiver

これで動的にメソッドを呼び出せる。

◆参考

http://docs.unity3d.com/Documentation/ScriptReference/SendMessageOptions.html

0 件のコメント:

コメントを投稿