2017-04-16 7 views
0

私はUnityを使ってアプリケーションを作成しています。私はグーグルに質問をしようとするたびに、古い回答やうまくいきません。私は私の団結階層に持っているものUnity(5.6.0)のテキストフィールドの値にアクセスする方法は?

は、私がアクセスし、変更/ボタンのいずれかをクリックするだけで、テキスト1およびテキスト2のパネルの両方に文字列を置換する必要が

Canvas > 
    Panel > 
    Text 
    SubPanela > 
     Button1 
     Button2 
     Text1 
    SubPanelb > 
     Button1 
     Button2 
     Text2 

です。検索結果から試したすべての方法がすばらしく失敗しました。

私がしようとしているのはこれです:SubPanelaでButton1を押すと、Text1の文字列をintに解析してインクリメントする必要があります。同時に、Textの文字列をintに解析し、それをデクリメントする必要があります。

私の質問は次のとおりです。テキストとテキスト1の文字列にはどうやってアクセスしますか?

答えて

1

あなたがするべきことは、テキストを変更したいクラス内(またはボタンクリックで呼び出された関数が存在する場所)から、Text要素へのパブリックリファレンスを作成することです。例:

+0

特定のテキストを参照する方法はありますか、それとも単にスクリプトが執着しているものを参照するだけですか?私はむしろ、サブパネルがすべて内部にあるパネルからの同じ共通のテキストを使用して、押されたボタン(すべてのサブパネルの機能は同じ)に関連付けられたテキストにリンクすることができる1つの機能を有すると思います。 – WMS

+0

各テキストのプロパティを作成し、それぞれの関数で参照することができます。 – mcjcloud

0

各テキストフィールドへの参照を格納する代わりに、mcjcloudの答えに示されているように、シーン階層をナビゲートすることもできます。

スクリプトがボタンのいずれかに接続されている場合は、あなたが上向きに移動するためにtransform.parentを使用することができます

using UnityEngine; 
using UnityEngine.UI; 

public class MyClass : MonoBehavior { 
    public void ButtonClicked() { 
     Transform t = transform.GetChild(0); //Panel 
     Transform ta = t.FindChild("SubPanela"); 
     Text txt1 = ta.FindChild("Text1").GetComponent<Text>(); 
     Transform tb = t.FindChild("SubPanelb"); 
     Text txt1 = ta.FindChild("Text2").GetComponent<Text>(); 
    } 
} 

...このスクリプトは、Canvasオブジェクトに装着されていると仮定。

FindChild(...)またはGetChild(...)を使用できます。後者の方が高速ですが、階層が変更可能であれば、FindChildはより堅牢になります。

関連する問題