Unityゲーム開発者アイデルンのBlog

よかったら読んでいってね

【Unity】シーンをまたいで値を保持する方法

ゲームを作っていて値を保持する方法に悩んだことがありませんでしょうか。

 

以前ご紹介したUnity標準で搭載しているPlayerPrefsを使ったセーブとロードをして値を保持してもいいのですがそれだといちいち書くのがめんどくさい。

 

今回ご紹介するものはstatic化しこのスクリプトは一つしかない状態にする方法となります。

 

 

Static化のメリット

Static化することでそのコードを読みやすくすることができるようになります。

 

またinstance化することでどこの状態からも読みやすくすることもできるようになります。

 

これをやるといちいち対象のスクリプトを代入してきて読み込ませる手間が省けることができます。

 

具体的なコードは

 

public stativ クラスコードの名前 instance;

 

if(instance==null)

{

instance=this;

DontLoadDestroy(this.gameobject);

}

else

{

Destroy(this.gameObject);

}

 

というコードになります。

 

解説

instanceが空の時にこのゲームオブジェクトが保持されて、また既にこのゲームオブジェクトが存在していたら重複しないように消えるという命令をやっています。

 

重複してしまうと仕様上どちらも存在してしまうのでどちらを参照するデータになるのかわからなくなる対策案になります。

 

よくわからなければそのままコピペしてご利用ください。

 

Static化のデメリット

 

1.どこからも呼び出せるのですがいちいち参照するときにコードが長くなってしまうデメリットがあります。

 

2.いちいちこのゲームオブジェクトの値を参照するのでデバックがやりずらい

 

正直のこの二つしか思いつかないので特に問題と感じなければガンガン使っていきましょう。

 

 

まとめ

 

ゲームオブジェクトのStatic化にはメリットデメリット両方存在するけどそれに見合うだけのメリットがあるので積極的に使っていこう。

 

また今回のコードでの使い方は

 

Static化したスクリプトの名前.instance.その中の値

 

という表記になります。

 

例:

 

Static化したスクリプトの表記方法。

public static TextScript instance;

public int testInt=0;

 

以下は別のスクリプトでの表記方法。

void Start()

{

  TextScript.instance.testInt=1;

}

 

この例だとStatic化したtestIntの値が1に変更されシーンをまたいでも保持されるようになります。

 

ゲーム作りが捗るようになるので使ってみてくださいね。