あーるPG - 社会人のデジタル生活

日曜プログラマになろうかなーと思った30代理系社会人の、キャリアアップや趣味(特にデジタル情報)の記録。らーめんとビールが好き。

インスペクタでいじる変数を共有するには

Unityの特徴的な要素の一つ、それはインスペクタで変数をいじれること。
ユーザーが定義した変数もいじることができる。
いじるには

public class Choge : MonoBehaviour {
  public float m_atai = 1.0f; //←これ

など、スクリプト上で、クラスのpublicメンバを追加する。
privateやstaticだとダメ。

で、他のclassからその値を参照する場合の話。
その変数がstaticメンバならなにも気にせず

Choge.m_atai

でアクセスできる。おそらくconst, enumでも出来るだろう。

GameObjectクラスの範疇であれば、オブジェクトにタグをつけておいて

//メンバ
public Choge m_hoge = null;

//Start()等で
this.m_hoge = GameObject.FindGameObjectWithTag("Taghoge").GetComponent();

//Update()等で
i = this.m_hoge.m_atai;

とするようだ。
で、GameObjectの範疇でない場合、どうすれば良いのかわからなかったので、以下のようにスクリプトを書いて、

// メンバ
public Choge m_hoge;

//Update ()で
  float hoge = m_hoge.m_atai;

prefabまたはインスタンスのインスペクタ上で、m_hogeにChogeのprefabをD&Dした。
これが最善かわからないけれど、動いてはいる。

本当はGetComponent関数を使うのが良いのかもしれないけど、取得できずにこけているよう。なんでだろう。
http://hamken100.blogspot.jp/2012/04/unity-c.html

// メンバ
private Choge m_hoge = null;

//Start()
Choge m_hoge = GetComponent();

//Update()
m_hoge.m_atai = 1;



ちなみに、同じオブジェクトについているスクリプトは、

GetComponent("スクリプト名").m_atai

でアクセスできるらしい。