(超基本)他のゲームオブジェクトにアタッチしているスクリプトの変数を外部から変更する方法

XXX_SCRIPT game_obj = GameObject.Find("MOTO_GameObject").GetComponent<XXX_SCRIPT>();
game_obj.functionX(); //雰囲気こんな感じか

//Find系は、AwakeやStartで1回だけやらないと負荷がかかるので注意。

unityを触るのが久しぶりすぎて超基本的なことを忘れていた。

「なんか変だなあ」と思いながら結構ゲーム自体は作れてしまったので不思議。

現在は、全てGetComponentに置き換えて、基本的に1つのゲームオブジェクトには1つのスクリプト。あるいは関連するスクリプトしかないようにしている。外部からどうしても変更したい場合は、GetComponentで取得して変更するとうまくいった。

誤ち

別のゲームオブジェクトを複数画面に表示させて、同じスクリプトをアタッチしていたところ、謎の状態となってしまった。
(AwakeでDebug.Logを書いたら同じログが3回も表示していた)

正解

基本的にスクリプトは1つだけアタッチさせて、外部からGetComponentでアクセスしていじる。

この記事の1番の上に書いたように、「GetComponent<XXX_SCRIPT>();」で探して利用すると良い。

いろいろなゲームオブジェクトにアタッチしておくと全て初期化されるので(だよね?)、データの更新など意味がなくなる。staticやらシングルトンにすると良いと思うがそれは基本的にやらない方がいい。

結局1本ゲームを作るとなると1から全て学ぶ必要があるんだよね。