我正在开发类似总和war(总结)类型的即时战略游戏,每个“单位”是 ~40 男人。每个男人必须定期:
- 测量本身周围每个男人之间的距离(用于疏散机制)。
- 检查其高度的土壤。
- 被渲染和动画。
我的尝试:
- 网格单元系统,使得只有附近细胞内的男人才进行距离测量,而不是所有人。
- 渲染和高度检测距离仅发生3次/每秒。
- 当男人远离摄像头时将其绘制为广告牌,并停止动画。
- 将男人从被动行为转换为单位脚本的纯数据。因此,每个单位现在具有pos[40 】, vel[40 】, lastAttackT[40 ]等所有男性数组的特性。
- 将动画编译成静态网格mesh like一个flipbook,因此单位脚本可以通过DrawMesh()进行绘制。
- 每个人的动画状态和当前帧都被单独跟踪,并执行:
每个mans动画状态和当前帧都被单独跟踪,并执行: - for(i=0; i<allMen; i++)
- 使用DrawMesh(flipbook[mesh], Matrix4x4.TRS(pos[i], rot[i], scale), material,mpb)绘制 mesh。
- 最近一次尝试:将 Unit TRS 转换为字典群组,根据动画和帧。因此,所有来自同一帧的同一动画的男人都可以在单一绘制调用下使用 DrawMeshInstanced() 绘制。它没有工作,我认为这会降低每秒帧数。
经过所有这些处理,每秒帧率仍然小于20个单位(大约1200名字),目标是具有 30+单位 (~1200男人)的图形。这些帧数太低了,人们似乎在做一些非常严重的事情。游戏中的类似的战争都有数千名士兵,通常都在彼此之间进行距离测量,并在60fps下执行数千个绘制调用。
评论 (0)