Unity输入字段锁定以前键入的字符一段时间后

时间:2016-05-25 02:43:16

标签: c# unity3d input-field

我一直在使用Unity C#中的文字游戏,并且对于我想要实施的反作弊机制已经停滞不前。

输入第一个字母后,我开始运行2秒计时器。在2秒之后,在播放器未提交或输入另一个字母时,输入字段应锁定输入字段上的先前键入的字母,并且之后输入的任何字母都应在其后键入。

这是我到目前为止的代码:

currTime = 0;
hasInput = false;
lockedString = "";

void Update(){
    if(hasInput){
        currTime += Time.deltaTime * 1;
        if(currTime >= 2){
            //Stores current string value of input field
            lockedString = inputField.text;
        }
    }
}

void OnInputValueChange(){
    currTime = 0;
    hasInput = true;
    if(lockedString != ""){
    inputField.text = lockedString + inputField.text;
    }
}

现在,只要输入字段的值发生变化,我就会运行OnInputValueChange()。我还设法存储到目前为止一旦定时器达到2秒就输入的字符串,但我不知道如何制作它以便输入字段将锁定的字符串“锁定”到前面并允许更改后面输入的字母它。代码inputField.text = lockedString + inputField.text;只需在每次更改值时将lockedString变量添加到输入字段。

期望的结果是伪代码:

//User types "bu"
//2 second timer starts
//During these 2 seconds, user can delete "bu" or continue typing
//User deletes "bu" and types "ah"
//Once the 2 second timer ends, whatever string is now in input is locked
//"ah" is now locked at the front of the input field
//After locking "ah", user cannot delete it anymore, but can continue typing

任何有关如何实现此类目标的见解都会非常有用。感谢您抽出宝贵时间提供帮助,我真的很感激!

1 个答案:

答案 0 :(得分:0)

目前,您只是连接字符串。您需要检查字符串是否以相同的字符开头,如果不是,则完全覆盖输入:

void Update() {
    if (hasInput && ((Time.time - inputTime) > 2f))
    {
        //Stores current string value of input field
        lockedString = inputField.text;
        hasInput = false;
    }
}

void OnInputValueChange() {
    inputTime = Time.time;
    hasInput = true;
    if ((lockedString.Length > 0) && (inputField.text.IndexOf(lockedString) != 0)) {
        // Replace invalid string
        inputField.text = lockedString;
        // Update cursor position
        inputField.MoveTextEnd(false);
    }
}

注意:我已经实施了另一种测量时间的方法。您可以使用自己的方法替换它。