Pages

2013年7月10日水曜日

Unityで文字列を表示したい2

ゼルク・ハーデスだ。

先日の記事ではGUI.Labelを使った表示をしていたのだが使い勝手が悪いと思い変更してみた。

変更点
看板の前で○を押したらGUI Textのインスタンスを生成する。
もう一度○ または離れると生成したインスタンスを消す。


まずは看板のオブジェクトにコリジョントリガーをアタッチ
スクリプトを作成してアタッチする

public class Kanban : MonoBehaviour {
public GameObject text;
public string words = "";

private bool isEnter = false;
private KanbanText word;
private GameObject temp;
public void OnTriggerStay(Collider c){
if(c.gameObject.tag == "Player"){
if(Input.GetButtonDown("Action")){
isEnter = !isEnter;
Instance();
}
}
}
public void OnTriggerExit(Collider c){
if(c.gameObject.tag == "Player"){
isEnter = false;
Instance();
}
}
private void Instance(){
if(isEnter){
temp = Instantiate(text) as GameObject;
word = (KanbanText)temp.GetComponent(typeof(KanbanText));
word.text = words;
}else{
if(temp != null)
Destroy(temp);
}
}
}

変数名がわかりづらいですね。
text変数はGUI TextのプレハブをInspectorから指定する。
string wordsは表示する文字列だ。これもInspectorから編集できるようにする。そうすることでたくさん看板を作ってもここをいじるだけでOKだ。
フラグはテキストを出すかどうか。
wordはGUI Textプレハブにアタッチされてるスクリプトをひっぱってくる。
tempは生成したオブジェクトを入れておく変数。

OnTriggerStayでPlayerが入ってきて○ボタンを押したらフラグを切り替える。
Exitは見たまんまだ。
Instance変数でtrueならインスタンス生成+wordsを設定
falseなら削除。もし何かしらの間違いでtempがnullだったら抜けるようにしておく。


GUI Textのほうのスクリプトは以下
public class KanbanText : MonoBehaviour {
public string text = "test";
// Use this for initialization
void Start () {
}
void Update(){
guiText.text = text;
}
}
(スクリプト名は勘弁してくれ・・・)

コレで完璧!!
コレをベースにキャラクターの会話もできるかな。

もっといい方法があったら教えて欲しい・・・



アリーヴェデルチ。

0 コメント:

コメントを投稿