我开发了洞游戏,玩家必须吸收地板上的一些立方体,一切似乎都很好,只是存在一些优化问题。我认为问题是由于寻找可吸收物体而引起的,该物体属于落入孔中,我有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);
}
}
}
如果您了解我在做什么,就想知道是否还有另一种方法可以在运行时提高fps效率
答案 0 :(得分:1)
使用物理引擎!
我可以想到两种解决方法:
Collider.OnTriggerEnter(Collider)
上的所有碰撞。