实例化预制件的新克隆,同时将先前的克隆设置为非活动

时间:2017-02-24 15:10:23

标签: c# unity3d

我正在开发一款游戏,让玩家轮流拼写单词。我有一个输入字段预制,只要玩家按下按钮就可以添加。 这是我到目前为止所做的: 当用户单击完成按钮时,这些代码行会实例化一个新的输入字段

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

现在我要添加的是当按下完成按钮时,预制件的先前实例化克隆应设置为非活动状态,新添加的实例化预制件是唯一有效的预制件,以便玩家无法编辑先前输入的字母。

任何帮助都将受到赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您必须创建一个临时GameObject来保留最后一个InputField。按下按钮后检查是否为null

如果为null,则没有最后输入。如果它不为空,则有最后一个输入,使用InputField获取lastInput.GetComponent<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();
}