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加算される。以上