2-4 混合三角面片颜色
在上一章中我们因为引入了HexDirection枚举,所以对一些方法进行了重构。接下来需要实现相邻两个地图单元的颜色混合功能。这里首先需要修改HexMesh.cs
脚本中的AddTriangleColor
方法。这个方法原本的参数只有一个,在构建三角面片的时候,会将这个参数的颜色信息赋值到三角面片的三个顶点信息中。为了实现颜色混合,需要再添加两个参数,让三角面片的每个顶点分别有不同的颜色值。
1 | /// <summary> |
接下来,我们在构建三角面片的时候就可以进行颜色的混合了。
1 | private void Triangulate(HexDirection direction, HexCell cell) |
运行以上代码的时候,Unity会产生一个空引用异常。这是因为,并不是每个地图单元都有6个与之相邻的地图单元。所以,这里要进行一次判断。当一个方位上没有地图单元的时候,就用自身的颜色代替。
1 | private void Triangulate(HexDirection direction, HexCell cell) |
“??”的含义:
这被称为可空合并运算符,简单来说”a??b”即”a!=null?a:b”的简写。
MSDN连接,“从可为空的值类型转换为基础类型”部分。
这里有个小诡计,因为Unity在把一个东西与组件比较时会自定义,(注:Unity中判断一个对象不为空时可以直接写成if(someThings),这在C#原本语法里是没有的)而这个运算符会绕过它并直接与null比较,不过这是销毁对象时才需要考虑的问题。
现在,我们虽然完成了相邻地图单元之间的颜色混合,但是视觉效果显得非常奇怪,完全不是我们想象中的样子。接下来我们需要慢慢解决这些问题。下一章中,我们将会让颜色混合更加平滑。