2017-12-10 19 views
1

私はUnityプロジェクトを作っていますが、別の異なるスクリプト(そのアクティブなシーンにはリンクされていません)から現在のアクティブシーンのUIのテキストを編集する必要があります。私は何アクティブシーンのゲームオブジェクトを別のスクリプトから編集するには?

  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; 
        } 

       } 

EDIT: の提案によると、私の最新のアップデートは、私はあなたが素晴らしい、解決策を見つけた参照

  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; 
        } 

       } 

      } 
関連する問題