2017-02-24 55 views
0

我正在開發一個遊戲,讓玩家輪流拼寫單詞。我有一個輸入字段預製,在玩家按下按鈕時添加。 以下是我迄今所做的: 代碼的這些行實例化一個新的輸入字段,當用戶點擊完成按鈕實例化一個預製件的新克隆,同時將以前的克隆設置爲不活動

//show next input field to enter letter 
private void ShowInputField(){ 
    GameObject inputFieldGameObject = inputFieldObjectPool.GetObject(); 
    inputFieldGameObject.transform.SetParent (inputFieldParent); 
    Canvas.ForceUpdateCanvases(); 
    GameObject.Find ("ScrollView").GetComponent<ScrollRect>().horizontalNormalizedPosition = 1; 
} 

下面是完成按鈕它調用ShowInputField功能和NextPlayerTurn功能代碼:

public void DoneButton(){ 
    NextPlayerTurn(); 
    ShowInputField(); 
} 

現在,我想補充的是,當完成按鈕被按下的預製以前的實例克隆應設置爲不活動與新添加的實例化的預製唯一活動的預製讓玩家無法編輯以前輸入字母。

任何幫助將不勝感激。先謝謝你。

+0

'prevObject.SetActive(false);'?或者說,'Destroy(prevObject);'? – Maakep

+1

@Fredrik請你詳細說明你的評論 – Abdul

+0

@Abdul謝謝我有同樣的問題,你的問題幫助我找到解決方案 –

回答

1

你必須創建一個臨時的GameObject來容納最後的InputField。按下按鈕後檢查它是否爲null

如果它爲空,則不存在最後的輸入。如果它不爲空,則有最後一個輸入,使用lastInput.GetComponent<InputField>();獲得附加的InputField,然後使用InputField.interactableInputField.readOnly禁用最後的InputField,以便玩家不能修改它。

你的其他變量選項是InputField.enabled變量。您必須測試並確定這些變量中哪一個最適合您。

GameObject lastInput = null; 

void DeActivateLastInput() 
{ 
    if (lastInput != null) 
    { 
     InputField inputField = lastInput.GetComponent<InputField>(); 
     inputField.interactable = false; 
     inputField.readOnly = true; 
    } 
} 

//show next input field to enter letter 
private void ShowInputField() 
{ 
    GameObject inputFieldGameObject = inputFieldObjectPool.GetObject(); 
    //Reset this pool since it may have been disabled before from the DeActivateLastInput function 
    InputField inputField = inputFieldGameObject.GetComponent<InputField>(); 
    inputField.interactable = true; 
    inputField.readOnly = false; 

    //Make this Input Last Input 
    lastInput = inputFieldGameObject; 

    inputFieldGameObject.transform.SetParent(inputFieldParent); 
    Canvas.ForceUpdateCanvases(); 
    GameObject.Find("ScrollView").GetComponent<ScrollRect>().horizontalNormalizedPosition = 1; 
} 

public void DoneButton() 
{ 
    NextPlayerTurn(); 
    DeActivateLastInput(); 
    ShowInputField(); 
} 
+1

請不要停用最後一個輸入字段,而是先前已添加的輸入字段 – Abdul

+0

我的答案中的示例代碼是**不**停用任何東西。它禁用'InputField'上的輸入。你想讓最後一個輸入可見但不能修改?然後在進一步評論之前嘗試一下。 – Programmer

+1

我試過你的示例代碼,我得到錯誤'NullReferenceException:對象引用未設置爲對象的實例 GameController.ShowInputField()(在Assets/Scripts/GameController.cs:73) GameController.Start()(at Assets/Scripts/GameController.cs:55)'我也希望最後一個輸入字段可以修改,但不是以前的輸入字段 – Abdul