在 uı 中显示使用 C# 的游戏引擎的搜索百分比 [关闭]

Posted

技术标签:

【中文标题】在 uı 中显示使用 C# 的游戏引擎的搜索百分比 [关闭]【英文标题】:Show searching percentage in uı for a game engine using C# [closed] 【发布时间】:2021-04-15 02:04:05 【问题描述】:

我有一个程序在一个大型单词列表中搜索单词在一个使用 C# 的游戏引擎中。但我的问题是,当单词列表太大时,UI 看起来似乎挂了。为了防止它,我使用 UI 以便用户知道搜索了多少字。但问题是 UI 会在搜索完成后显示结果。当用户单击某个按钮时,我将如何让 UI 开始提供信息?提前谢谢你。

    public int searchedTextAmount = 0; 

    void Start()
    
        int seacrhedTextAmount = 0;
    

    void Update()
    
        ui.text = searchedTextAmount;  // when buttonclickevent started, I like this value change while searching process in progress supplied by Search_Method
    

    void Search_Method()
    
        foreach (string word in words)
        
            searchedTextAmount++;
            //someoperations
        
    

    void butonclickevent()
    
        Invoke("Search_Method");
    

【问题讨论】:

【参考方案1】:

您可以将Coroutine 与StopWatch 结合使用,以中断搜索并在搜索时间过长时渲染一帧。

类似

// Tweak this according to your needs in the Inspector
[SerializeField] private float targetFramerate = 60f;

private StopWatch sw = new StopWatch();

IEnumerator Search_Method()

    // No need for this to be a field
    var searchedTextAmount = 0;
    var total = words.Length;

    // How long one frame may take before we force to render
    // E.g. for 60fps this will 16.66666...
    var millisecondsPerFrame = 1000f / targetFramerate;

    sw.Restart();       

    foreach (string word in words)
    
        searchedTextAmount++;
        //someoperations

        if(sw.elapsedMilliseconds >= millisecondsPerFrame)
        
            // This will update the text once a frame (so only when needed) and will look like e.g.
            // "Searching 50/500 (10%)
            ui.text = $"Searching ...  searchedTextAmount/total (searchedTextAmount/(float)total:P0)";

            // This tells Unity to "pause" this routine
            // render this frame
            // and continue from here in the next frame
            yield return null;

            sw.Restart();
        
    

    sw.Stop();


void butonclickevent()

    StartCoroutine (Search_Method());

因此,targetFrameRate 的较低值意味着您在搜索过程中的帧速率将下降(滞后)更多。另一方面,更高的targetFrameRate 将导致搜索在绝对实时上花费更长的时间。

【讨论】:

非常感谢我的朋友...它完全符合我的要求

以上是关于在 uı 中显示使用 C# 的游戏引擎的搜索百分比 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

搜索引擎如何找到相关内容?

请问 JAVA C# C++ 这三种编程语言都是擅长开发啥的?都各有啥优缺点?我偏向游戏编程方

如何在 C# 中存储 SQL 查询的结果字符串

漫谈C#编程语言在游戏领域的应用

出现无法显示此页。确保Web地址正常。使用搜索引擎查找页面。请过几分钟后刷新页面

在 C# MVC 中检测主要搜索引擎的最佳方法