Unity3D 他のGameObjectから、privateなフィールドを取得する方法。
記事タイトルの本題に入る前に、アクションゲームなどで、上記のようなゲームオブジェクト(以降、回復パックと呼ぶ)を、シーンに配置し、『プレイヤーが接触すると、HPを回復できる。』という効果を実装したい場合を考えます。
この場合は、
1.“回復パック”に規定(Heal_Pack)のタグをつける。
2.“プレイヤー”が持つスクリプトのOnTriggerEnterメソッド内に
【タグがheal_Packnaなら、このオブジェクトのHPフィールドをx加算する】
という処理を記述すれば実行できます。
わざわざ、“回復パック側”のスクリプトに
【Playerのフィールドをget取得して回復値を加算し、setで返却する】
のような処理を実装する必要はありません。
しかし!
特定のオブジェクトのフィールドを覗き込み、値によって自分の動作を変えたいオブジェクトを実装する場合はget(およびset)を実装する必要があります。
先ほどの例では、
“回復パック”は、最終的に変化するのは“プレイヤー”という、自分以外のオブジェクトだったので、この必要性は生まれませんでした。
また、他のオブジェクトのパラメータでも、速度や位置などはスクリプト内のクラスフィールではなく、RigidBody・transformなどの別コンポーネントが保持しているので
対象のオブジェクトに対してGetComponent<>();することで取得できますね。
今回の記事は、クラス内に自分で設定したprivareなフィールドを取得する方法です。
【例1】
近くを通ったプレイヤーの残りHPを報告するセンサー
【例2】
巣の卵の数が規定値以下だと襲い掛かってくる母鳥
などが『他のオブジェクトのフィールドの値によって自分の動作を変えたいオブジェクト』
に該当しますね。
例1では、プレイヤーのHPフィールド←センサー(報告する数値が変化)
例2では、巣のcount_eggフィールド←母鳥(アニメーションや動作が変化)
という動きになります。
実際に実装していきましょう!
1.覗かれるオブジェクトのクラスにgetterを実装する。
渡したいフィールド変数を返却地に持つgetterメソッドを記述しましょう
また、覗きたいオブジェクトのクラスでgetter_HPを記述するのでアクセス修飾子は
public である必要があります。
<int HPの場合>
public int getter_HP(){
return HP;
}
となりますね。
2.覗くオブジェクトは対象のスクリプト・コンポーネントを取得する。
1.覗きたい(getter_HPしたい)対象のオブジェクトを取得する。
2.取得したオブジェクトのスクリプト・コンポーネントを取得し、スクリプト変数に格納する。
3.スクリプト変数名.getter_HPで、数値を取得できる。
GameObject gameobject = GameObject.Find("Player");
NewBehaviourScript Player_script = gameobject.GetComponent<NewBehaviourScript>();
int Player_HP = Player.script.getter_HP();
Discussion