我正在开发一款游戏,让玩家轮流拼写单词。我有一个输入字段预制,只要玩家按下按钮就可以添加。 这是我到目前为止所做的: 当用户单击完成按钮时,这些代码行会实例化一个新的输入字段
//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 :(得分:1)
您必须创建一个临时GameObject来保留最后一个InputField
。按下按钮后检查是否为null
。
如果为null,则没有最后输入。如果它不为空,则有最后一个输入,使用InputField
获取lastInput.GetComponent<InputField>();
,然后使用InputField.interactable
或InputField.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();
}