2017-03-12 3 views
0

Ich schreibe eine Neustart-Funktion, wo ich die Instanz aller Prefabs, die zu einem Panel gehören, löschen möchte. Dieser Code fügt ein neues Eingabefeld an die MutterDestroy Instanz aller Prefab-Klon funktioniert nicht

private void ShowInputField(){ 

    GameObject inputFieldGameObject = inputFieldObjectPool.GetObject(); 

    //reset pool since it may have been disabled by the DeActivatePreviousInputFields function 
    InputField inputField = inputFieldGameObject.GetComponent<InputField>(); 
    inputField.Select(); 
    inputField.ActivateInputField(); 
    inputField.interactable = true; 
    inputField.readOnly = false; 

    //make this the previous inputs 
    previousInputs = inputFieldGameObject; 

    //assign the prefab to its parent panel 
    inputFieldGameObject.transform.SetParent (inputFieldParent); 
    inputFieldGameObject.transform.localScale = Vector3.one; 
    Canvas.ForceUpdateCanvases(); 

    //make scroll bar always show the last added input field 
    GameObject.Find ("ScrollView").GetComponent<ScrollRect>().horizontalNormalizedPosition = 1; 

} 

Das Bild unten zeigt, wie es aussieht vor dem Neustart before restart

der Code für den Neustart, die alle Instanzen des Fertig zerstört und fügt man wieder ist unten gezeigt.

void RestartGame(){ 
    //gets all elements of the parent 
    InputField [] childElements = letterPanel.GetComponentsInChildren<InputField>(); 
    Debug.Log (childElements.Count()); 
    foreach (var item in childElements) { 
     Destroy (item); 
    } 
    ShowInputField() 
} 

dies sollte alle Instanzen der Fertig zerstören, aber es macht es sie nur bearbeitet werden, nicht mit dem Bild, um es

enter image description here

Wie löse ich dieses Problem unten zeigt? Vielen Dank im Voraus ...

+0

Was zeigt 'Debug.Log (childElements.Count())'? Vielleicht zerstört es sie tatsächlich, aber 'ShowInputField()' erstellt die neuen, die Sie sehen. Können Sie dies überprüfen, indem Sie 'ShowInputField()' auskommentieren. – Programmer

+0

Ich habe getan, dass ich die gleiche Ausgabe wie oben bekomme. Das 'ShowInputField()' zeigt ein neues Eingabefeld – Abdul

+0

Was zeigt Debug.Log (childElements.Count())? – Programmer

Antwort

0

ich das tat und es funktionierte

void RestartGame(){ 
    //gets all elements of the parent 
    InputField [] childElements = letterPanel.GetComponentsInChildren<InputField>(); 
    Debug.Log (childElements.Count()); 
    foreach (vInputField item in childElements) { 
     if(item.name.Contains("InputField")){ 
      Destroy (item.gameObject); 
     } 
    } 
    ShowInputField() 
} 
2

Sie versuchen, den aktuellen Eintrag aus der Liste zu zerstören Sie durch Aufzählen wurden, aber dies ist ein Eingabefeld, wo man nicht zerstören. Indem Sie stattdessen auf das Spielobjekt verweisen, das ihm gehört und das zerstört, entfernen Sie die Eingabefelder.

Verwandte Themen