2014/05/12_Unityで外部変数にアクセスする。
Unity
Unity外部変数にアクセスする。
今回僕がやりたいことは、3DTextにScoreを表示させるということです。
常にUpdateし続けるので、関数化してから Update() に放り込むということをしています。
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にその値を設定します。
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加算される。以上