2017-12-10 5 views
1

Ich mache ein Unity-Projekt und ich muss Text von einigen UI der aktuellen aktiven Szene von einem anderen Skript bearbeiten (nicht mit dieser aktiven Szene verknüpft).Wie bearbeitet GameObject der aktiven Szene von einem anderen Skript?

Was ich tue, ist

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

      } 

Das Update nicht auf der Szene reflektiert wird. Wie kann ich auf die aktive Szene aktualisieren?

+0

Ich folge dir nicht ganz ... Wenn das Skript nicht läuft, wird nichts passieren. Könnten Sie versuchen zu erklären, zu welchem ​​Zweck Sie dies tun? Außerdem mache ich etwas Refactoring, das der Lesbarkeit Ihres Codes in der Zwischenzeit helfen sollte. – Maakep

+0

Danke. Ich habe den Weg gefunden. Ich muss das Kind des Spielobjekts suchen. – batuman

Antwort

1

Ich sehe Sie die Lösung gefunden, groß. Es wäre großartig, wenn Sie die Lösung hier in Stackoverflow teilen würden, damit jeder andere mit ähnlichen Problemen Ihre Lösung verwenden kann, um ihnen zu helfen. Als Belohnung gibt es hier einige Refactoring Ihres Codes, um es einfacher zu verwalten und zu lesen, wenn Sie es wünschen.

// 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

Wow schön, danke. Ordentlich – batuman

0

Ich habe den Weg gefunden, ich muss das Kind des GameObject suchen.

   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: Nach dem Vorschlag, meine neueste Update ist

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

       } 

      } 
Verwandte Themen