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

Need code optimization but can't figure out how to do that

我开发了洞游戏,玩家必须在地板上吸收一些立方体一切似乎都很好,只是有一些优化问题。我认为问题是由寻找落入洞中的可吸收物体引起的,我有 2 种方法,它们在 FixedUpdate 中调用。在我迭代 Cubes 列表的每一帧上调用 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);
        }

    }

}

如果你明白我在做什么,只是想知道是否有另一种方法可以更有效地增加运行时的 fps

使用物理引擎!

我可以想到两种方法:

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