【问题标题】:Unity Input Field Lock previously typed characters after a timeUnity Input Field Lock 一段时间后之前输入的字符
【发布时间】:2016-05-26 03:00:57
【问题描述】:

我一直在玩 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

任何关于我如何实现这样的目标的见解都会非常有帮助。感谢您抽出宝贵时间提供帮助,非常感谢!

【问题讨论】:

    标签: c# unity3d input-field


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的帮助,我一回家就测试一下!
    • 工作就像一个魅力!谢谢。如果我可能会问另一个后续问题,现在,输入字段很好地锁定了玩家输入,但是当我尝试删除字母时,光标向后移动而不更改字符串。有没有办法确保光标始终保持在锁定字符串的前面?非常感谢,+1。
    • 正在查看 atm...我没有看到很多解决方案
    • 相信你在找inputField.MoveTextEnd(false);
    • 我已更新我的答案以包括插入符号位置更新
    猜你喜欢
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    相关资源
    最近更新 更多