基于Unity2019最新ECS架构开发MMO游戏笔记18
为六边形涂色
- 为六边形涂色
- 链接相邻单元
- 颜色混合
- 更新计划
- 作者的话
- 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:鼠标点击六边形单元涂色
上一篇中为我们已经画好了六边形,接下来我们要给六边形上色,如图所示: 其实只需改动少量的代码即可完成这个功能,我们在HexCellData六边形单元数据中已经有字段来保存颜色数据了:
///
/// C:保存六边形的坐标和颜色数据
///
[Serializable]
public struct HexCellData : IComponentData {
public int X;
public int Y;
public int Z;
public Color color;
}
因此不需要额外新增数据,并且我们在创建六边形单元(CreateHexCellSystem)时已经为其赋值:
//4.设置每个单元的数据
CommandBuffer.SetComponent(index, instance, new HexCellData
{
X = x - z / 2,
Y = 0,
Z = z,
color = createrData.Color,
});
这时每个六边形单元都有颜色数据了,我们只需要调动RenderMesh来渲染即可,打开CreateHexMapSystem:
- 新增颜色的原生数组,来获取六边形单元的颜色数据:
var colors = new NativeArray(HexMetrics.HexCelllCount, Allocator.TempJob);
//获取六边形单元实体的数据
var getDataJob = new GetHexCellDataForRenderMeshJob
{
Vertices = vertices,
Colors=colors
}.Schedule(hexCells, inputDeps);
getDataJob.Complete();
//这个必须要在使用完后手动释放内存
colors.Dispose();
- 在Job中得到颜色数据
///
/// 把所有六边形单元实体的数据传递出去
///
[BurstCompile]
private struct GetHexCellDataForRenderMeshJob : IJobForEachWithEntity {
public NativeArray Vertices;
public NativeArray Colors;
public void Execute(Entity entity, int index, [ReadOnly]ref Translation position,[ReadOnly]ref HexCellData hexCellData)
{
var center = position.Value;
Colors[index] = hexCellData.color;
Vertices[index] = new Vector3
{
x = center.x,
y = center.y,
z = center.z
};
}
}
- 把数据交给网格组件进行渲染:
var Colors= new NativeList(HexMetrics.HexCelllCount*18, Allocator.TempJob);
for (int i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【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脚手架写一个简单的页面?