※この記事はSceneをまたがない場合における、異なるスクリプト間での変数共有を前提にしています。
はじめに
Unityでゲームを作っているとどうしても他のスクリプトからあの変数とってきて値をいじりたいなってことがあると思います。public変数にすればいいんじゃない?ってなるかもしれないのですが、それだとデータが改竄されやすくなるらしい(あんまり詳しくわかっていない笑)ので、Unity初心者の方のお役に立てればという気持ちを込めて僕なりに色々試行錯誤した結果をここに残します。
実装方法
プロパティを使います。getter、setterと呼ばれるものを用いて他のスクリプトから変数にアクセスできるようにしてみました。
目次
プロパティとは
そもそもプロパティって?ってなると思うのでちょこっとだけ解説していこうかと思います。
プロパティとは、オブジェクトの状態や性質を表すための ”オブジェクトが保持するデータ” を指し表す言葉です。
と言ってもはじめのうちは中々ピンとこないと思うので、、。
ここでは ”オブジェクトが保持する値の取得、その値の変更をつかさどるメソッド” のようなものだと思ってくれたら以下の理解がしやすいと思います。
各スクリプト
状況: スクリプトAの変数countをスクリプトBで変更したい。
A.cs
public class A: MonoBehaviour
{
int count; //今回他のスクリプトからアクセス・変更したい変数
public int countProperty // ここでプロパティを使う。publicをつけます。
{
get { return count; } // これがgettr。他のスクリプトから呼び出した時、returnのあとに書いた変数を返す。
set { count = value; } // これがsettr。valueには他のスクリプトで代入された値が格納されます。(そこまで気にしなくて大丈夫。)
}
}
B.cs
public class B: MonoBehaviour
{
A script_A; //スクリプトAをこっち呼び出すために宣言。
void Start()
{
this.script_A = FindObjectOfType<A>(); //スクリプトを探して上宣言した変数に代入。
int i = script_A.countProperty; // スクリプトAから変数を持ってくる。(get)
script_A.countProperty = 10; // 取ってきたスクリプトAの変数を変更。(set)
}
}
まとめ
今回は変数共有についてやりました。使い方はわかるけど細かいところの意味は分からない。。ってこともあると思います。僕もあまりよく分かっていなかったのですが、それでも何回か使っていくうちにわかっていくところも多かったので最初は書き写すってことも大事だと思いました。