【问题标题】:Get an event triggered when text change unity?当文本更改统一时触发事件?
【发布时间】:2017-07-31 01:31:32
【问题描述】:

这里的文本区域在数字方面不断变化,我想在文本区域获得特定数字时触发一个事件我已经尝试过这个示例 -

 public void myfunction45(Canvas Panel)
{
    if (Indicator = 45) {     
    Panel.enabled = false;.
    }
} //(indicator- www.progress). 

但它不起作用(它不读取它没有任何反应)。我如何匹配条件,因为数字是具体的。请举例说明。提前致谢。

【问题讨论】:

    标签: android unity3d textarea unity5


    【解决方案1】:

    那个 if 语句会给你带来麻烦。

    你会想要:

    if(Indicator == 5)
    

    相反。在您分配值而不检查它的那一刻,这将导致编译器错误。如果这只是一个错字,请更新您的答案,否则会有些混乱。

    关于检查文本值。您必须获取文本值,因为您需要对文本区域的引用。这种方法假定文本区域的值由用户设置。目前您没有抓取任何文本值进行比较,因此 if 语句将不知道要比较什么。

    这是一种方法:

    public void myfunction5(Canvas Panel)
    {
        float result;
    
        string textValue = yourTextArea.text;
    
        if(Single.TryParse(textValue, out result))
        {
            if(result == Indicator)
            {
                 Panel.enabled = false;
            }
        } 
    }
    

    您可以使用 TryParse 来避免在用户输入非数字内容时可能引发的任何潜在异常。此方法将从您的文本区域获取值,如何获取文本区域取决于您,并尝试将文本值解析为浮点数。如果解析成功,该方法将返回 true,否则返回 false。

    这里是 TryParse 的参考资料: https://msdn.microsoft.com/en-us/library/26sxas5t(v=vs.110).aspx

    如果您想将其解析为 int,那么您将使用 Int32 版本的 TryParse,https://msdn.microsoft.com/en-us/library/system.int32_methods(v=vs.110).aspx

    我还建议在输入字段文档中达到峰值:https://docs.unity3d.com/Manual/script-InputField.html

    您可以将您的方法订阅到 Input-fields On Value Changed 事件,不过您的函数需要稍作调整:

    public void myfunction5(string text)
    {
        float result;
    
        if(Single.TryParse(text, out result))
        {
            if(result == Indicator)
            {
                 CachedPanel.enabled = false;
            }
        }  
    }
    

    不要忘记存储对要禁用的面板的引用。

    希望这就是你所追求的。

    【讨论】:

    • 感谢您的回复。我会试试这个
    【解决方案2】:

    Panel 已经是 Canvas 类型,GetComponent<Canvas> 在同一类型上没有任何意义。

    尝试使用Panel.enabled = false;

    对于其余部分,我们不知道您是如何获得 Indicator 引用的,也不知道您是如何构建 UI 层次结构的,因此我们无法评估是否存在问题。

    编辑:我可能会错过单曲= 让我感到困惑,哈哈。我应该避免在疲倦时回答问题。

    【讨论】:

    • 我们仍然不知道这个方法之外发生了什么,请提供整个脚本。您是否尝试在 if 中添加 Debug.Log 以检查它是否从未遇到过,或者是否存在禁用 Canvas 组件的问题?您是要禁用组件还是对象?因为对于后者,您需要使用Panel.SetActive(false);
    • 我试图禁用画布的组件而不是对象本身,但它可以双向工作,我正在下载文件,在完整下载时我想显示另一个画布,显示下载完整的文本 n 图像。这是下载过程的代码-
    • WWW www = 新的 WWW (requestURL); while (!www.isDone) { if (isInQueue (requestURL)) { Debug.Log("Progress : " + www.progress); if (requestURLInEditor == requestURL) { currentProgressInEditor = www.progress; if (currentProgressInEditor > 0.995) { currentProgressInEditor = 1.0f; } }
    猜你喜欢
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多