版权声明:本文为博主原创文章未经博主允许不得转载。 /l/article/details/
跟着官方教程走了一遍基本明白如何创建一个随机地图了。主要是算法的问题如用广度优先获取区域(房间或墙)大小,用深度优先递归查找区域边界还有计算两点之间经过结点的梯度变化。吐槽一下官方教程教程中把结构和类全都放一起,不少方法耦合度很高需要自己就优化了一下。
继承于Node地图位置的基本单位。 |
房间成员变量包含所有结点,边界结点们直接相连的房间们,房间大小(结点个数)是否连接(直接或间接)到主房间,是否是主房间主要方法:SetAccessibleFromMainRoom() :如果本身可以连接到主房间,则使其与之相连的其他房间们都设置为可以连接到主房间(传递性) |
ConnectClosestRooms(allRooms, true)
。
ConnectClosestRooms(allRooms, true)
,知道最后找不到需要连接的房间
GetLine(tileA,tileB)
),原理很简单就是先看成直角坐标,计算两个点产生的直线可以求出线的斜率(梯喥),通过斜率可以计算出下一个移动位置
CrateStaticBorder()
)
MeshGenerator
),用于渲染还有碰撞检测
一个Square含有8个主要方位结点(如图粉色)。
简化出来看成一个绿色方框,四个角分别代表四个标志位如下图
CalculateMeshOutlines()
),存到List<List<int>> outlines
中及如果有多个房间独立开来的,那么这个变量意思就是存放每个房间的边缘而每个边缘含有一系列结点索引。
GetConnectedOutlineVertex(vertexIndex)
),找到下一个能和其组成单面墙的顶点(其原理就是判断这条边是否只被一个三角形占有,因为如果一条边同时被两个三角形占有时说明他两边都是墙。)
outlines
),每两个点之间产生一片墙创建方法如下图。
白色顶点:上面两個顶点是外边缘连续两个顶点通过加上高度,产生多两个白色顶点一共四个白色顶点添加到墙顶点列表(wallVertices)中以用来绘制mesh。
红色蓝綠色三角形:同之前划分三角形一个意思,用来组成mesh的三角形单位
EdgeCollider2D
就好了。
创建一个Player(小球)还有个跟踪楿机,丢到场景中
需要注意的是MeshCollider是单面,如果从背面看是完全透明的,及如果小球在绿色墙体里面是可以出来的,但是不能从外面正面穿过MeshCollider同样,对光线来说其背面也是透明的所以如果没有最外层的Mesh,光线可以直接穿过墙体
同样使用小球和跟踪相機测试。
注意到下面创建有两个Edge Collider,是因为含有一层内部房间轮廓还有最外面一圈矩形。
一直都对美工的工作比较感兴趣最近公司项目需要,顺便网上搜索了个效果记录一下。
图形改变总共有24种效果
8: "百页窗形向右";
9: "百页窗形向下";
10: "棋盘形交叉向右";
11: "棋盤形交叉向下";
17: "条纹状向左下";
18: "条纹状向左上";
19: "条纹状向右下";
20: "条纹状向右上";
因此你只要改变RevealTrans滤镜的“Transition"的值,就能获得不同的网页切换效果
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。