2017-04-16 5 views
0

Unity와 함께 앱을 만드는 중입니다. Google에 질문 할 때마다 이전 답변이나 작동하지 않는 답변이 표시됩니다. 내 단결 계층 구조에있어 무엇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 요소에 대한 public 참조를 만들어야합니다. 예를 들어 : mcjcloud의 대답이 말한대로

using UnityEngine.UI; 

public class MyClass : MonoBehavior { 
    public Text MyTextField; 

    public void ButtonClicked() { 
     MyTextField.text = "random new text"; 
    } 
} 
+0

특정 텍스트를 참조하도록 만드는 방법이 있습니까? 아니면 스크립트가 붙어있는 텍스트를 참조하는 것입니까? SubPanels가 모두 안에있는 패널에서 동일한 일반 텍스트를 사용하여 버튼 (모든 SubPanel에는 동일한 기능이 있음)과 연결된 텍스트에 연결할 수있는 기능이 하나 있습니다. – WMS

+0

각 텍스트에 대해 속성을 만들고 각각의 기능에서 참조 할 수 있습니다. – mcjcloud

0

대신 각 텍스트 필드에 대한 참조를 저장하는, 당신은 또한 장면 계층 구조를 탐색 할 수 있습니다. 스크립트가 버튼 중 하나에 연결되어있는 경우이 스크립트를 가정

는 위쪽으로 이동 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>(); 
    } 
} 

... 캔버스 객체에 부착되어 있습니다.

FindChild(...) 또는 GetChild(...)을 적합하게 사용할 수 있습니다. 후자는 빠르지 만 계층 구조가 변경 가능하면 FindChild가 더욱 강력 해집니다.