テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

ゲームをビルドした後でもスクリプト(機能)を追加する

既にビルドし出力したゲームに追加でスクリプトを与えて実行する。上手く使えば、基本システムを出力した後、外部システムを丸ごと追加する事も可能かもしれない。

ただし、当然のように最適化はかからないし、さらにJIT実行出来ない環境(具体的にはiOS)では動かすことは出来ない。

Unity_AddScriptRuntimeDemo
https://github.com/tsubaki/Unity_AddScriptRuntimeDemo

ちなみに「スクリプトをアタッチ済みのプレハブを読みたい」といった場合、別段特別な処理する事なく、AssetBundleにプレハブを含めれば読み込める。

基本はアセットバンドルへのスクリプトを含めるでやっている事と全く同じ。


手順はこんな感じ。

作成手順

1.インポートするスクリプトDLL化し、拡張子をbytesとする
2.AssetBundleに1の手順で作成したbytesファイルを含める

読込手順

1.WWWクラスでAssetBundleをインスタンス
2.プレハブからTextAsset形式でbytes化したファイルを取得
3.Assembly.Load でbyteをアセンブルに読込
4.typeで型情報を取得し、addComponentで追加

ポイントは「DLL化する」事と「拡張子をBytes」とする事。

iOSで動かないといった理由で余り活用される技術ではないけど、面白い使い方も出来るかもしれない。(DLL化さえしていれば良いので、AIを持ち寄ってバトルしたり等々)



なお、「アセットバンドルをスクリプトに含める」と紹介されているが、実はコレAssetBudleに含めなくとも読める。具体的には、作成手順1で作った物を読込手順3〜4で読む感じ。AssetBundleは只の入れ物。

なのでBasicでも動くよ。やったね!