2017-12-10 6 views
1

Unity 프로젝트를 만들고 있는데 다른 활성 스크립트의 일부 UI 텍스트를 편집해야합니다 (활성 장면에 연결되지 않음). 내가 무엇다른 장면에서 활성 장면의 GameObject를 편집하는 방법은 무엇입니까?

  Scene scene = SceneManager.GetActiveScene(); 
      Debug.Log (scene.name); 
      if (scene.name == "RangeView") 
      { 
       List<GameObject> activeObjects = new List<GameObject>(); 
       scene.GetRootGameObjects(activeObjects); 
       for (int i = 0; i < activeObjects.Count; ++i) 
       { 
        GameObject gameObject = activeObjects[ i ]; 
        if (gameObject.name == "Clubdigit") { 
         gameObject.GetComponent<Text>().text = 10.ToString(); 
        } 
        else if (gameObject.name == "Balldigit") { 
         gameObject.GetComponent<Text>().text = 10.ToString(); 
        } else if (gameObject.name == "Distancedigit") { 
         gameObject.GetComponent<Text>().text = 10.ToString(); 
        } else if (gameObject.name == "Ballspeeddigit") { 
         gameObject.GetComponent<Text>().text = 10.ToString(); 
        } else if (gameObject.name == "Distancedigit2") { 
         gameObject.GetComponent<Text>().text = 10.ToString(); 
        } else if (gameObject.name == "Backspindigit") { 
         gameObject.GetComponent<Text>().text = 10.ToString(); 
        } else if (gameObject.name == "Sidespindigit") { 
         gameObject.GetComponent<Text>().text = 10.ToString(); 
        }else if (gameObject.name == "Launchangleindigit") { 
         gameObject.GetComponent<Text>().text = 10.ToString(); 
        } 
       } 

      } 

업데이트는 현장에 반영되지 않습니다이다. 활성 장면으로 어떻게 업데이트합니까?

+0

나는 꽤 당신을 따르고 있지 않습니다 ... 스크립트가 실행되고 있지 않으면 아무 일도 일어나지 않을 것입니다. 어떤 목적으로 이것을하고 있는지 설명해 주시겠습니까? 또한 코드의 가독성을 높이는 리팩토링을 할 것입니다. – Maakep

+0

감사합니다. 나는 그 길을 발견했다. 게임 개체의 하위를 검색해야합니다. – batuman

답변

1

입니다. 비슷한 문제가있는 다른 모든 사람들이 솔루션을 사용하여 도움을 줄 수 있도록 Stackoverflow에서 솔루션을 공유하는 것이 좋을 것입니다. 대담한 방법으로, 코드를 리팩터링하여 관리하고 읽는 것을 더 쉽게 할 수 있습니다.

// Put the dependency Using System.Linq; at the top 

List<String> objectsToChange = new List<String>() 
{ 
    "Balldigit", 
    "Distancedigit", 
    "Ballspeeddigit", 
    "Distancedigit2", 
    "Backspindigit", 
    "Sidespindigit", 
    "Launchangleindigit" 
} 

Scene scene = SceneManager.GetActiveScene(); 
Debug.Log (scene.name); 

if (scene.name == "RangeView") 
{ 
    List<GameObject> activeObjects = new List<GameObject>(); 
    scene.GetRootGameObjects(activeObjects); 
    foreach (GameObject activeObject in activeObjects) 
    { 
     if (objectsToChange.Contains(activeObject.name)) 
     { 
      activeObject.GetComponent<Text>().text = 10.ToString(); 
     } 
    } 

} 
+0

와우, 고마워. 산뜻한 – batuman

0

나는 그 방법을 찾았습니다. GameObject의 하위 항목을 검색해야합니다.

   List<GameObject> activeObjects = new List<GameObject>(); 
       scene.GetRootGameObjects(activeObjects); 
       for (int i = 0; i < activeObjects.Count; ++i) 
       { 
        GameObject gameObject = activeObjects[ i ]; 
        Debug.Log (gameObject.name); 
        if (gameObject.name == "Canvas") { 
         foreach (Transform firstchild in gameObject.transform) { 
          Debug.Log ("firstchild name " + firstchild.name); 
          if (firstchild.name == "Swinginfo") { 
           foreach (Transform secondchild in firstchild.transform) { 
            if (secondchild.name == "Clubdigit") { 
             secondchild.GetComponent<Text>().text = 10.ToString();//result[0].ToString(); 
            } 
            else if (secondchild.name == "Balldigit") { 
             secondchild.GetComponent<Text>().text = 10.ToString();//result[0].ToString(); 
            } else if (secondchild.name == "Distancedigit") { 
             secondchild.GetComponent<Text>().text = 10.ToString();//0.ToString(); 
            } 
           } 

          }else if(firstchild.name == "Swinginfo2"){ 
           foreach (Transform secondchild in firstchild.transform) { 
            if (secondchild.name == "Ballspeeddigit") { 
             secondchild.GetComponent<Text>().text = 10.ToString();//result[0].ToString(); 
            } else if (secondchild.name == "Distancedigit2") { 
             secondchild.GetComponent<Text>().text = 10.ToString();//0.ToString(); 
            } else if (secondchild.name == "Backspindigit") { 
             secondchild.GetComponent<Text>().text = 10.ToString();//12.ToString(); 
            } else if (secondchild.name == "Sidespindigit") { 
             secondchild.GetComponent<Text>().text = 10.ToString();//13.ToString(); 
            }else if (secondchild.name == "Launchangleindigit") { 
             secondchild.GetComponent<Text>().text = 10.ToString();//result[3].ToString(); 
            } 
           } 

          } 
         } 
         break; 
        } 

       } 

편집 : 이 제안에 따르면, 내 최신 업데이트 난 당신이 훌륭한 해결책을 발견 볼

  if (scene.name == "RangeView") 
      { 
       List<String> objectsToChange = new List<String>() { 
        "Balldigit", 
        "Distancedigit", 
        "Ballspeeddigit", 
        "Distancedigit2", 
        "Backspindigit", 
        "Sidespindigit", 
        "Launchangleindigit" 
       }; 
       List<GameObject> activeObjects = new List<GameObject>(); 
       scene.GetRootGameObjects(activeObjects); 
       for (int i = 0; i < activeObjects.Count; ++i) 
       { 
        GameObject gameObject = activeObjects[ i ]; 
        Debug.Log (gameObject.name); 
        if (gameObject.name == "Canvas") 
        { 
         foreach (Transform firstchild in gameObject.transform) { 
          Debug.Log ("firstchild name " + firstchild.name); 
          if (firstchild.name == "Swinginfo") { 
           foreach (Transform secondchild in firstchild.transform) { 
            Debug.Log ("secondchild name " + secondchild.name); 
            if (objectsToChange.Contains(secondchild.name)) 
            { 
             secondchild.GetComponent<Text>().text = 10.ToString(); 
            } 
           } 

          }else if(firstchild.name == "Swinginfo2"){ 
           foreach (Transform secondchild in firstchild.transform) { 
            Debug.Log ("secondchild name " + secondchild.name); 
            if (objectsToChange.Contains(secondchild.name)) 
            { 
             secondchild.GetComponent<Text>().text = 10.ToString(); 
            } 
           } 

          } 
         } 
         break; 
        } 

       } 

      } 
관련 문제