【问题标题】:Android 上的 Unity 新输入系统在执行耗时功能后未收到触摸事件
【发布时间】:2022-01-16 15:59:50
【问题描述】:

这是演示视频https://www.youtube.com/watch?v=2YeNwtXaC_0, 该项目是New Input System Demo:Touch Samples;enter image description here

我添加了一个耗时的函数:

  public void DelayTime()
    {
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();
        while (stopwatch.ElapsedMilliseconds< 1000)
        {
            var vector3 = new Vector3(1.0254452f, 1544.454f, 846.2342412f);
            var magnitude = vector3.magnitude + vector3.sqrMagnitude;
            magnitude += Vector3.Angle(Random.insideUnitSphere, Random.insideUnitSphere);
        }
        stopwatch.Stop();
    }

当点击按钮时,该函数会被调用。

问题是当点击按钮一次或多次时,意味着android会冻结。当android冻结时,我触摸屏幕一点点,然后屏幕将永远不会收到来自新输入系统的触摸事件。

【问题讨论】:

  • 我只是让函数运行1秒就可以了。这是触发bug的最快方法。为什么你不能抓住重点?

标签: unity3d


【解决方案1】:

问题不在于“输入系统”。这是关于DelayTime函数中的代码sn-p。

您不允许程序在触摸后继续运行 1000 毫秒。你说“1000 毫秒,只在这个线程上做这个工作!不要刷新屏幕,不要运行其他脚本等。”

试试这个代码,它会被修复的。

public IEnumerator DelayTime()
{
    Stopwatch stopwatch = new Stopwatch();
    stopwatch.Start();
    while (stopwatch.ElapsedMilliseconds< 1000)
    {
        var vector3 = new Vector3(1.0254452f, 1544.454f, 846.2342412f);
        var magnitude = vector3.magnitude + vector3.sqrMagnitude;
        magnitude += Vector3.Angle(Random.insideUnitSphere, Random.insideUnitSphere);

        yield return null;
    }
    stopwatch.Stop();
}

【讨论】:

    猜你喜欢
    • 2022-09-25
    • 2020-12-27
    • 2022-07-20
    • 2016-04-15
    • 2013-10-28
    • 2019-05-09
    • 1970-01-01
    • 2022-01-21
    • 2020-09-29
    相关资源
    最近更新 更多