基于Unity2019最新ECS架构开发MMO游戏笔记17
从点到面画六边形
- 从点到面画六边形
- 一点小优化
- 更新计划
- 作者的话
- ECS系列目录
- ECS官方示例1:ForEach
- ECS官方案例2:IJobForEach
- ECS官方案例3:IJobChunk
- ECS官方案例4:SubScene
- ECS官方案例5:SpawnFromMonoBehaviour
- ECS官方案例6:SpawnFromEntity
- ECS官方案例7:SpawnAndRemove
- ECS进阶:FixedTimestepWorkaround
- ECS进阶:Boids
- ECS进阶:场景切换器
- ECS进阶:MegaCity0
- ECS进阶:MegaCity1
- UnityMMO资源整合&服务器部署
- UnityMMO选人流程
- UnityMMO主世界
- UnityMMO网络同步
- 用ECS做HexMap:自动生成地图系统
- 用ECS做HexMap:利用RenderMesh绘制六边形
- 用ECS做HexMap:利用RenderMesh为六边形涂色
- 用ECS做HexMap:六边形单元的颜色混合
- 用ECS做HexMap:重构地图系统
- 用ECS做HexMap:鼠标点击六边形单元涂色
上一篇中我们已经成功生成了地图矩阵,可是却不是基于六边形单元的,因为我们还没有开始绘制六边形单元。 如下图所示,画好的六边形单元是这样的: 如何画一个六边形呢? 首先要对图形学基础有一定的认识,Unity引擎当中渲染出来的图形都是由网格(Mesh)构成的,而网格又是由无数的顶点(Vertex)连接而成。其中每三个顶点又构成了一个基本单位:三角(Triangle),仔细看看网格的图片就会发现:
复杂的外观下面是简单的图形学。
就如图中的正方体(Cube),一共六个面,每个面有两个三角,每个三角有三个顶点,拆解开了,就好绘制了(当然,还有法线/材质/贴图等等,这里暂时忽略。我们先做减法,后面再做加法)。 首先我们要计算三个顶点出来,这样我们就可以画出三角形了。
///
/// 把所有六边形单元中心点作为所有顶点的起始点
///
[BurstCompile]
private struct CopyHexCellCenterPositionsToVerticesJob : IJobForEachWithEntity {
public NativeArray Vertices;
public void Execute(Entity entity, int index, [ReadOnly]ref Translation position)
{
var center = position.Value;
Vertices[index] = new Vector3
{
x = center.x,
y = center.y,
z = center.z
};
}
}
- 获取到上一篇中创建的HexCell,并得到其坐标作为三角的一个顶点,这个顶点放到六边形中正好是六边形的正中心;
- 如上图所示,中心那朵菊花就是六边形的圆心顶点,由这个顶点推算出另外两个顶点的坐标;
//HexMetrics.corners是上一篇中定义的六边形的个六个角
Vector3 顶点2=(center + HexMetrics.corners[0])
Vector3 顶点3=(center + HexMetrics.corners[1])
- 把数据交给网格组件进行渲染,三角就绘制出来了。
//顶点和三角
renderMesh.mesh.vertices = Vertices.ToArray();
renderMesh.mesh.triangles = Triangles.ToArray();
//重新计算法线
renderMesh.mesh.RecalculateNormals();
如上图所示,三角就顺利画出来了,接下来把刚刚的算法循环六次,六个这样的三角就组成了六边形:
Vector3 center = vertices[i];
for (int j = 0; j
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?