目录 |
1 适配圆角立方体 2 检查映射 3 用数学来玩 4 调整映射 |
本章重点:
1、把立方体变为球体
2、在Unity中可视化映射
3、分析换算的损耗
4、用数学优化算法
在本教程中,我们将创建一个基于立方体的球面网格,然后再使用数学推理来改进它。
本教程是CatLikeCoding系列的一部分,原文地址见文章底部。“原创”标识意为原创翻译而非原创教程。
这篇文章是基于前一篇 圆角立方体 上的拓展。兼容Unity 5.0.1或者更高级的版本。
(从一种形状变到另一种形状)
1 适配圆角立方体
通过上一篇文章,其实你可能已经发现了,只要我们把它所有三维的尺寸设置一样,并把圆度值设置为纬度值的一半就能得到一个完美的球体了。
但如果你确实只想要一个球体,那么圆角立方体所提供的灵活度就不够用了。那么,这次让我们为这个需求创建一个单独的组件来实现。
复制RoundedCube脚本并将其重命名为CubeSphere。然后用一个 gridSize 替换这三个大小,并删除 roundness 字段。
怎么快速的将3个字段替换成1个?
最方便的方法就是使用编辑器rename变量名,这会保证对它们的所有引用也被重命名。
比如,首先将xSize重命名为GridSize,然后对ySize和zSize执行相同的操作。
或者,执行多个搜索和替换操作。
删除roundness字段肯定会导致一些编译错误,因为引用到它的地方还没有处理,删掉相关的引用即可。
然后,我们可以先创建一个碰撞体。上一章节,我们创建了多个box 和capsule (胶囊)碰撞体来表示圆角立方体,但是球体只需要一个球体立方体即可。这意味着我们可以删除AddBoxCollider和AddCapsuleCollider方法,并将CreateColliders简化为一行代码。
其次是顶点的位置,它也依赖于roundness字段。先前我们通过对向量设置法线的方法形成了圆角立方体的角,并且该向量从角的内部指向原始立方体的某个位置。但是当我们要处理成一个球体的时候,这就是我们唯一和必须要做的,因为其他的情况都会退化掉。
如果球体的坐标系是以它的局部原点为中心的话,会很方便的。我们不用再费时用内部的立方体和不同的圆以及网格来共同搭建mesh了。
要创建一个单位球体--半径为1单位的球体--首先需要规范位于原点中心的立方体的顶点,使立方体能准确地包含球体,那么它的边长就为2。
(单位圆的包围正方形边长2)
我们可以在 SetVertex 内创建这个立方体的顶点,方法是将原始坐标除以网格大小,缩放,然后减去单位向量。
这就产生了一个单位球体,但有的时候,可能需要一个不同的半径,所以让我们让它可以配置。
现在,我们可以将一个立方体对象放到场景中,你可以从头开始自己按照教程写,或者直接用源码里提供的组件,替换圆角立方体对象的组件。