2014/05/12_Unityで外部変数にアクセスする。

Unity

Unity外部変数にアクセスする。
今回僕がやりたいことは、3DTextにScoreを表示させるということです。
常にUpdateし続けるので、関数化してから Update() に放り込むということをしています。

score.cs
      				
public class score : MonoBehaviour {
	public int scoreUp;
	// Use this for initialization
	void Start () {
		scoreUp = 0;
	}

	// Update is called once per frame
	void Update () {
		ScoreUpdate ();
	}
	
	void ScoreUpdate(){
		TextMesh tm = (TextMesh)gameObject.GetComponent (typeof(TextMesh));
		string sc_t = "SCORE:" + scoreUp;
		tm.text = sc_t;
	}
}
動作

score.csはScoreUpdate関数を常に呼び続けます。
このスクリプトを付与するオブジェクトはScoreを表示している3DTextです。
ScoreUpdate()の中身は、TextMesh型の変数を宣言し、GetComponentでTextMesh型を取得。
string型のsc_tという変数に"表示させたい文字" と score(publicな変数)を表示させます。 最後にtm.textでtextにその値を設定します。

playerTest.cs
 
using UnityEngine;
using System.Collections;

public class playerTest : MonoBehaviour {
	public AudioClip audioClip;
	int counter = 0;
	bool flag=false;
	void Start() {
	}
	// Update is called once per frame
	void Update () {
		if (counter % 60 == 1 && flag==true) {
			scoreAccess();
			flag=false;;
		}
		counter++;
	}
	void scoreAccess(){
		GameObject test = GameObject.Find ("Score");
		test.GetComponent< score >().scoreUp += 10;
	}
}
動作

playerTest.csは空のオブジェクトを生成し、それに付与するスクリプトです。
この場合は、実体は見えないけど存在しているイメージです。
Update内のif文は 60fpsの場合を想定して、1秒ごとにscoreAccess()を呼び出しています。
(flagとかも適当につけてます。)
scoreAccessは適当な変数を用意して、Find関数で"Score"という名前のオブジェクトを検索し参照を代入しています。
そこから、GetComponentして、scoreUp変数に+10しています。
... counter++
この記述方法どこかで見たことあると思ったらFPGAのVerilogや!!

全体動作の簡単な説明

1秒ごとにScoreが10加算される。
以上