需要代码优化,但不知道该怎么做

时间:2019-08-16 11:10:16

标签: c# unity3d optimization game-development

我开发了洞游戏,玩家必须吸收地板上的一些立方体,一切似乎都很好,只是存在一些优化问题。我认为问题是由于寻找可吸收物体而引起的,该物体属于落入孔中,我有2种方法,它们在FixedUpdate中被调用。在我在“多维数据集”列表上迭代的每一帧上使用一种称为CountNearbyCubes的方法,有时它的计数甚至是500-600个对象,如果某些对象位于孔附近,则将它们添加到另一个列表中,并在第二个列表中使用名为AttractCubes的方法。在这种方法中,我要遍历所有对象并查看它们的变换位置,并将它们推向孔的变换位置。

这既是方法又是FixedUpdate的代码,我还添加了游戏的屏幕截图以使其更加清晰。

对不起,如果我的问题令人困惑。预先感谢您的帮助。

 void FixedUpdate() {

    //count real nearbyCubes
    CountNearbyCubes(ref NearbyCubes, CubesContainers, GravityCenterTransform.position);
    //count minor nearbyCubes
    AttractCubes(NearbyCubes);


}

private void AttractCubes(List<GameObject> cubes) {
    foreach (GameObject cube in cubes) {

        if (!cube.GetComponent<AbsorbableObject>().IsAbsorbed) {

            Vector3 force = CentripetalMovement.GetGravitationForce(GravityCenterTransform, cube.transform, Mass, CubeMass);

            if (cube.tag == "Bomb") {
                force /= 5;
            }

            cube.GetComponent<Rigidbody>().AddForce(force, ForceMode.Impulse);

        }

    }

}


private void CountNearbyCubes(ref List<GameObject> nearbyCubes, GameObject cubesContainer, Vector3 gravityCenter) {
    foreach (Transform cube in cubesContainer.transform) {

        if (Vector3.SqrMagnitude(cube.position - gravityCenter) < Mathf.Pow(NearbyDistance, 2)) {
            if (!nearbyCubes.Contains(cube.gameObject)) {
                if (cube.tag == "Cube" && !cube.gameObject.GetComponent<CubeController>().IsAbsorbed)
                    nearbyCubes.Add(cube.gameObject);
                else if (cube.tag == "Bomb")
                    nearbyCubes.Add(cube.gameObject);
            }
        }
        else {
            nearbyCubes.Remove(cube.gameObject);
        }

    }

}

enter image description here

如果您了解我在做什么,就想知道是否还有另一种方法可以在运行时提高fps效率

1 个答案:

答案 0 :(得分:1)

使用物理引擎!

我可以想到两种解决方法:

  1. 将对撞机附加到洞游戏对象上,将其标记为触发器,然后 捕获Collider.OnTriggerEnter(Collider)上的所有碰撞。
  2. 直接使用SphereCast