【问题标题】:Changing to a random background causing lag on android更改为随机背景导致 android 滞后
【发布时间】:2019-06-08 18:22:16
【问题描述】:

我正在尝试更改我的游戏的背景,它正在运行,但也导致了 android 的延迟。

我绑定了两种不同的解决方案,但结果相同。首先,背景变化由一个 int 变量管理,该变量具有两个数字之间的随机值和一个每秒增加 10f 的浮点数,用作分数。

这里还有一些其他代码,但我已经单独删除了它们,似乎是导致延迟的背景代码。

这是当前代码:

        rand1 = Random.Range(0, 4);
        rand2 = Random.Range(4, 8);
        rand3 = Random.Range(8, 12);


        //start off with a random blue background
        BGlist[rand1].SetActive(true);
        // BGmesh.material = BGmat[rand];  //OTHER SOLUTION - change material of mesh renderer

    }


    void Update()
    {
        //Set starttext to false if the character move
        if (lvlmang.left || lvlmang.right)
        {
            startText.SetActive(false);

            //every second score and speed increases
            aliveTime += Time.deltaTime;
            if (aliveTime >= 1)
            {
                scores += 10f;
                scores2 += 10f;
                speedManager += 10f;

                speedManager2 += 10f;

                speedManager3 += 10f;




                scoreText.text = scores.ToString();
                scoreText2.text = scores2.ToString();
                aliveTime -= (int)aliveTime; //reset
            }

        }
        //Increase speed after 8 seconds
        if (speedManager == 80f)
        {
            pControl.speed += 0.25f;
            speedManager = 0f;
        }

        //start screen fade every 30 seconds (preparing for background change)
        if (speedManager2 == 300f)
        {
           fadingBG.StartFading();
            speedManager2 = 0f;
        }

        if (speedManager3 == 310f || speedManager3 == 1213)
        {
            //Random yellow background


            //Set the previous backgrounds game object to false
                BGlist[0].SetActive(false);
                BGlist[1].SetActive(false);
                BGlist[2].SetActive(false);
                BGlist[3].SetActive(false);



            BGlist[rand2].SetActive(true);  //Random yellow background
            //BGmesh.material = BGmat[rand]; // OTHER SOLUTION - change material of mesh renderer
            fadingBG.StopFading();
            speedManager3 += 1f;

        }


        if (speedManager3 == 611f || speedManager3 == 1514)
        {
            //Random red background


            //Set the previous backgrounds game object to false
            BGlist[4].SetActive(false);
            BGlist[5].SetActive(false);
            BGlist[6].SetActive(false);
            BGlist[7].SetActive(false);


            BGlist[rand3].SetActive(true); //Random red background
            // BGmesh.material = BGmat[rand];
            fadingBG.StopFading();
            speedManager3 += 1f;

        }


        if (speedManager3 == 912f || speedManager3 == 1815)
        {
            //Random blue background

            //Set the previous backgrounds game object to false
            BGlist[8].SetActive(false);
            BGlist[9].SetActive(false);
            BGlist[10].SetActive(false);
            BGlist[11].SetActive(false);

            BGlist[rand1].SetActive(true); //Random blue background
            // BGmesh.material = BGmat[rand];
            fadingBG.StopFading();
            speedManager3 += 1f;

        }
    }

所以我尝试更改网格渲染器的材质,并为我设置为活动和虚假的每个背景制作单独的游戏对象。

我正在使用网格渲染器来制作一个跟随相机无限滚动的背景。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    主要问题是您在更新中调用 Random 并且会破坏性能(我知道,因为几年前我犯了同样的错误)。 当您知道要生成多个随机值时,您应该只执行一次(例如在开始中)将它们存储在一个数组中并稍后使用它们。如果您的数组为空,您可以再次调用该方法以生成多个随机值 1 次。 切记不要在 Update 中调用 Random,避免每帧都进行任何硬计算(这不仅包括 Random,还应尽可能避免除法)。

    【讨论】:

    • 有用的信息,谢谢!滞后问题仍然存在。移动所有 random.range 以在更新后启动和使用变量。
    • 我注意到当它是数组中的第一个背景时,游戏运行流畅。
    • @burr 尝试更新问题中的代码。也许还有一些东西可以改变以获得更好的性能(或者第一个背景工作没有延迟的原因)
    • 编辑了代码,似乎每个 Random.Range 中的第一个背景都没有延迟。
    • @burr 好的,有很多事情可能会出现问题。 1.如果您需要每秒执行一次代码,则没有理由创建变量,请检查是否> 1并减少相同的值...这只是一种奇怪的方法。只需将 aliveTime 重置为 0,或使用 InvokeRepeating (更好的解决方案)。 2.为什么是3个随机int值?只需使用一个数组。 3.我不确定为什么speedManager3可以是多个但准确的值​​(int或float)。怎么可能是1213? 4. 最后问题可能出在 StartFading StopFading (不确定是不是 Unity 方法但我没有找到文档)。
    猜你喜欢
    • 2013-10-02
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多