我正在做一个Voxel游戏,我的引擎使用Physics.raycasts和Mesh colliders来获取你点击的块的坐标,直到现在。我决定移除网格对撞机,因为它在某些情况下只是吃太多的性能而且我的fps下拉到0.1fps几秒钟(例如你应该能够滚动y层)我只需要它用于光线投射。我不使用任何其他物理相关的东西。没有网格对撞机,帧速率稳定在60到100 fps,但现在我发现很难找到另一种方法来获取我点击哪个块的信息。
有什么建议吗?
到目前为止,我正在使用这段代码:
public Vector3? GetBlockCursor(){
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray, out hit)) {
hit.point += (hit.normal * -0.5f);
hit.point = new Vector3(Mathf.RoundToInt(hit.point.x), Mathf.RoundToInt(hit.point.y),
Mathf.RoundToInt(hit.point.z));
return hit.point;
}
else return null;
}
答案 0 :(得分:2)
很难说,因为它始终取决于游戏逻辑,优化的效率和优势在哪里。基本上每帧一个或几个光线投射对于PhysX来说应该不是什么大问题,所以我认为还有其他的罪魁祸首。一些建议(也许你已经考虑过了):
GetBlockCursor
一次,或仅通过每次第二次或第三次更新调用