2017-02-24 4 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

最後のInputFieldを保持するために一時的なゲームオブジェクトを作成する必要があります。ボタンを押した後、nullであることを確認してください。

nullの場合、最後の入力はありません。 nullでない場合、最後の入力があり、lastInput.GetComponent<InputField>();でそれに接続されたInputFieldを取得し、最後にInputFieldを無効にしてプレーヤーが変更できないようにするには、InputField.interactableまたはInputField.readOnlyを使用します。

その他の可変オプションは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()私は最後の入力フィールドを変更可能にしたいが、前の入力フィールドは変更しないでください。 – Abdul

関連する問題