如何在Android版本上修复高速且落后的问题

时间:2019-04-30 17:58:44

标签: c# unity3d

我有我一直在努力的这款游戏。昨晚,我已经构建好它并将其上传到Google Play。然后,我拿着Android手机,在Play商店中下载了我的游戏,它开始运行时,运行异常。游戏的移动速度令人难以置信,而且动作缓慢,几乎就像我将摄像机速度设置为一个很高的数字一样。这是完全无法玩的。这将是游戏的主菜单,上面没有UI元素:https://youtu.be/Hxih--U8q9g

现场的一些背景:

所有这些建筑物和道具都会在运行时在更新功能中随着玩家前进而实例化,但是一旦玩家通过它们,它们也会被销毁。它们都是预制件,都使用各自的材料和质地。玩家将玩的实际游戏级别与主菜单完全相同,只是其中包含玩家。我的问题是,这可能仅是因为移动设备的优化不佳吗?

我已经将质量设置设置为Unity内部的最低设置,并且还将所有纹理的尺寸从4K分辨率降低到了128x128-512x512(取决于资产)。即使进行了这些优化,游戏仍会像以前一样运行不良。

我将更改实例化对象的方式,而将使用对象池。我还将使用纹理图集代替所有这些不同的纹理和材料。

这是我目前实例化预制件的方式:

    void Update()
    {
        if (player.transform.position.z >= spawn.transform.position.z)
        {
            center = transform.position;
            for (int i = 0; i < Random.Range(obstacleDifficulty.x, obstacleDifficulty.y); i++)
            {
                StartCoroutine(Delay());
            }
            Vector3 newPos = transform.position;
            newPos.z += moveSpawner;
            transform.position = newPos;
        }
    }

    public void SpawnObstacles()
    {
        Vector3 pos = center + new Vector3(Random.Range(-size.x / 2, size.x / 2), 0, Random.Range(-size.z / 2, size.z / 2));
        int n = Random.Range(0, obstacles.Length);
        GameObject theObstacle = obstacles[n];
        Instantiate(theObstacle, pos, rotation);
    }

    IEnumerator Delay()
    {
        yield return new WaitForSeconds(0.05f);
        SpawnObstacles();
    }

我想解决此问题,以便游戏运行流畅。我想知道使用池化和地图集来完成上述操作是否足以解决此问题。

编辑: 这是我的相机控制器脚本:

using UnityEngine;
using System.Collections;

public class CameraController : MonoBehaviour
{

    public GameObject player;
    public float cameraHeight;

    private Vector3 offset;

    void Start ()
    {
        offset = transform.position - player.transform.position;
    }

    void LateUpdate ()
    {
        transform.position = player.transform.position + offset;
        transform.position = new Vector3(0, cameraHeight, transform.position.z);
    }
}

我已经在Unity的官方教程中看到有关使用Time.deltaTime的一些信息,但是我认为我应该在播放器的运动中使用它,并将播放器的速度值乘以Time.deltaTime并没有得到我想要的结果。这是我玩家的动作:

  

rb.velocity = new Vector3(xVelocity * Input.acceleration.x * 1.75f,0,   速度);

昨晚,我还禁用了相机上的所有图像效果,并从场景中删除了约25批,我不知道这些效果会如此昂贵。我将场景分为55到70左右,大约有15批,而我还没有在手机上对其进行测试以了解其移动方式。

2 个答案:

答案 0 :(得分:0)

我刚刚做了一个测试场景。它与实际游戏级别相同,但是在此级别中,我禁用了所有实例化的内容,取而代之的是,我只是通过手动放置预制件来制作了级别的一小部分。我还在所有对象上放置了完全相同的材质,即标准的蓝色材质。因此,没有对象在运行时生成且没有纹理,并且我的构建仍在我的android设备上运行缓慢。它不像以前那样笨拙,自从我禁用后处理效果(雾除外)以来,它就可以玩了,但是游戏仍然无法流畅运行。

我还可以做些什么来使其流畅运行?

当我在同一台android设备上玩游戏时,这是我的探查器,但在使用Unity Remote的编辑器中。 Profiler screenshot

答案 1 :(得分:0)

您需要检查您的事件探查器,然后您将看到是否需要优化游戏并检查批次。 而且使用Time.deltatime就像您要使游戏独立于设备类型一样,因此即使在速度较慢的设备上,您也会获得10的速度(假设您将速度设置为10),而在更快的高端设备上您仍将获得10的速度。如果不使用Time.deltatime,则高端设备中的帧数将增加,并且速度将变得如此之高,因为由于以下原因,您将非常快地移动播放器高帧频,低端设备中移动缓慢。