Nanashi-softプログラマ専用Unityでゲーム開発


◇Unityでゲーム開発 -JavaScript:ファイル間の連携-

○スクリプトを別ファイルに分ける方法

ProjectにJavascriptファイルを追加するだけです(^^;

メニューのAssets→Create→Javascriptをクリックすると,ProjectにNewBehaviourScriptとかいうファイル名で追加 されます
NewBehaviourScriptをクリックすると,名前を変える事ができます
ちなみに,フォルダ階層は関係しないので,どこに作っても良いです。同一のファイル名は使えない仕様ですから(同じファイル名が2つあると警告が出ます)

test_Aとtest_Bファイルを作成したとします

○他のファイルから変数を読み書きする方法

頭に staticを付けて宣言します
例)test_Aに以下の宣言をする
static var hensu : int = 100;
※メソッドの外で宣言します
※初期値をココに書けるのは JavaScriptの特徴です

これを別ファイルからアクセスする方法は,ファイル名.変数名です
例)test_Bから test_Aの変数 hensuにアクセスする
function Start(){
	test_A.hensu = test_A.hensu + 10;
	Debug.Log(test_A.hensu);
}
※補足:スクリプトを実行するには,Hierarchyのオブジェクトに配置する必要があります。例えば,Main Cameraなどにドラッグ&ドロップする
※補足:Debug.Logの出力先はコンソールです。メニューの Window→Consoleね

実行すると,
110
UnityEngine.Debug:Log(Object)
と表示されます

○他のファイルからメソッドを実行する方法

頭に staticを付けたメソッドを記述します
例)test_Aに以下のメソッドを記述する
static function kansu() : void {
	hensu = hensu + 10;
}
これを別ファイルから呼び出す方法は,ファイル名.メソッド名()です
例)test_Bから test_Aのメソッド kansu()を呼び出す
function Start(){
	test_A.hensu = test_A.hensu + 10;
	test_A.kansu();
	Debug.Log(test_A.hensu);
}

○両方から同時に書き換える場合の注意点

test_Aと test_Bの両方の Updateメソッドに異なる計算を書いた場合にどうなるのか?
例)test_A
static var hensu : int = 100;

function Update () {
	hensu = hensu - 10;
	Debug.Log("test_A:" + hensu);
}
例)test_B
function Update () {
	test_A.hensu = test_A.hensu + 10;
	Debug.Log("test_B:" + test_A.hensu);
}
と書いて実行すると,どう表示されるのか?
今の Unityはマルチメソッドでは無いので,順番に実行されます
どちらが先に実行されるのかは,初期では不定です

その順番を設定する必要があります
メニューの Edit→Project Settings→Script Execution Orderを選択
Inspectorに Mono Managerが表示されます
※この機能は,確か Unity 3.4から実装されました

+ボタンをクリックして,test_Aと test_Bを追加して下さい
Applyボタンをクリックして設定完了
数値の小さい順に処理されます

test_A < test_Bに設定した場合
test_A:90
test_B:100

test_B < test_Aに設定した場合
test_B:110
test_A:100


TOPプログラマ専用Unityでゲーム開発