- 颜色混合
- 颜色平均化
- 区域混合
- 三角化混合区域
- 边界连接桥
- 填充间隙
- 边界合并
- 更新计划
- 作者的话
- 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:鼠标点击六边形单元涂色
在开始之前先纠正上一篇的错误,首先逐个打印颜色:
//打印六个方向的颜色:NE, E, SE, SW, W, NW
if (i == 0)
{
Debug.Log("自身颜色:" + color + " | NE方向颜色:" + neighbor);
}
然后分别得到第一个六边形单元的六个方向的颜色值:
HexCellColorRGBA(0.098, 0.902, 0.934, 1.000) | NE Direction ColorRGBA(0.638, 0.136, 0.585, 1.000) HexCellColorRGBA(0.098, 0.902, 0.934, 1.000) | E Direction ColorRGBA(0.239, 0.273, 0.753, 1.000) HexCellColorRGBA(0.098, 0.902, 0.934, 1.000) | SE Direction ColorRGBA(0.098, 0.902, 0.934, 1.000) HexCellColorRGBA(0.098, 0.902, 0.934, 1.000) | SW Direction ColorRGBA(0.098, 0.902, 0.934, 1.000) HexCellColorRGBA(0.098, 0.902, 0.934, 1.000) | W Direction ColorRGBA(0.098, 0.902, 0.934, 1.000) HexCellColorRGBA(0.098, 0.902, 0.934, 1.000) | NW Direction ColorRGBA(0.098, 0.902, 0.934, 1.000)
如下图所示,第0个六边形单元的SE、SW、W、NW这四个方向的颜色应该与自身颜色一致才对。实际上打印出来的颜色也是如此,那为什么还会渲染出其他颜色来呢? 我调整矩阵的宽和高,使其只产生4个单元,终于发现了真相:
把最后一个放到第0个,然后依照顺序递推,就能得到正确的结果。为什么会产生这种问题的本质原因不明,但是逻辑上已经找到了蛛丝马迹,愚蠢的解决办法是按照其逻辑反递推,把最后一个插入到第0个,代码很简单:
//把最后一个放到第0顺位,后面的依此类推
Vector3 center;
if (i+1== vertices.Length)
{
center = vertices[0];
}
else
{
center = vertices[i+1];
}
本质原因是实体在Job中的执行顺序颠倒了,正常顺位应该是:0->1->2->3,但实际上变成了:3->1->2->0。 虽然不知道底层为什么要这样做,但是困扰我一夜的bug总算搞定了。 如上图所示,问题修复了!之前做了减法(单元数量4),现在做加法看看有没有问题:
好了,问题解决了,代码已推送Github!
其实只需改动少量的代码即可完成这个功能,我们在HexCellData六边形单元数据中已经有字段来保存颜色数据了:
neighbor = (color + neighbor) * 0.5f;
可以看到,和最终效果还有一定距离,每3个相邻的单元就有四种颜色:
接下来就进行三个方向的颜色混合:
//保存需要混合的颜色
Color[] blendColors = new Color[6];
//把六个相邻单元的颜色添加到这个数组中,代码省略
………………
//三向混合
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脚手架写一个简单的页面?