【unity 5学习记录】 可编辑地形 网格 原理讲解 17.8.8
来源:互联网 发布:大数据目前发展情况 编辑:程序博客网 时间:2024/05/22 03:09
本篇为上一篇的原理讲解,我觉得我的表达能力很差,看上一篇的源代码以及边上的注释可能理解到会容易一些
先说ray.cs 射线探测 鼠标按键的探测也写在这里面
0是左键
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
}
else
{
}
else
{
}
else
{
}
TerrainManager里改写的比较多因为要建立的是三维的。之前的面片是二维的
思路是获取鼠标指针射线碰撞的坐标,转化成要操作的方块坐标。
目前是操作一个区块里的方块。
private Vector3 chunkSize;//区块的长宽高
private int groundHeight;//地面高度
private ushort[] blockData;//方块数组
方块数组初始化对象的时候元素数([]里面要表示的)就是 区块 长*宽*高,代码如下
这是根据方块坐标 计算方块编号的函数 方块坐标从0,0,0开始到(chunksize.x-1,chunksize.y-1,chunksize.z-1)
2
3
4
{
}
方块数组的值设置为0就是空 1就是有方块,然后接下来在顶点以及三角形遍历的时候,就是读取方块数据来判断是否需要绘制该顶点/三角形
先来说顶点绘制。由于顶点比方块多 我们for循环的范围需要+1。比方说2*2*2的方块需要遍历的顶点数就是3*3*3,首先我们要通过函数bool ifIsSide(int x, int y, int z,int VorT)来判断当前遍历是不是周围方块。如果是的话先暂时避开。因为他们并不是上下左右前后6个面都能获取到方块数据。这个函数还有一个参数来区分是顶点的避开还是三角形面的避开,如果是顶点遍历那VorT取0 如果是三角形遍历那 VorT取1
下面附上该函数代码
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
}
然后在接下来就是判断包含该顶点位置的四周的方块是不是都是空或都是实心。如果不是。那这个顶点就要被加入进去。函数是bool ifDifFromAround(int x, int y, int z) 参数为当前遍历的顶点坐标
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
{
}
整个顶点遍历的代码如下
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{
}
然后就是遍历三角形,其实是遍历方块坐标,先筛选出是实心的方块,然后分别判断这个方块坐标 上下左右前后的方块是不是空的。如果是空的。就需要吧这两个方块之间的面通过添加三角形的方式绘制出来。以下是代码
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
{
}
到这里为止我们就已经实现了改变方块数据。以及根据方块数据绘制面所需要调用的函数了
接下来是执行方块的放置和破坏的函数。表面上是放置和破坏。实际上是把整个地形重新绘制一遍,所以我们要引入区块的思想。不然绘制的太多。会导致运算量过大
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
}
- 【unity 5学习记录】 可编辑地形 网格 原理讲解 17.8.8
- 【unity 5学习记录】 可编辑地形 网格(类似minecraft)17.8.8
- unity实现可编辑网格
- 转载Unity地形编辑
- ExtJs学习笔记(4)_EditorGridPanel(可编辑的网格控件)
- unity 网格切割算法讲解
- Unity导出场景地形网格到.obj文件
- 【边玩边学Unity3d】实现可编辑网格
- 【边玩边学Unity3d】实现可编辑网格
- 【边玩边学Unity3d】实现可编辑网格
- unity地形编辑扩展插件Landspace Auto Material介绍
- Unity 自定义地形(可刷地形、材质和种树)(一)
- Unity Shader Example 5 (地形混合)
- Unity3D动态地形网格一
- Unity3D-Terrain地形编辑
- Dynamics 365 可编辑子网格的字段禁用不可编辑
- unity学习记录
- unity UI学习记录
- Js 执行上下文
- Java对象的序列化与反序列化那点事
- python爬虫----简单的抓取斗鱼弹幕
- Android View
- leetcode--Recover Binary Search Tree
- 【unity 5学习记录】 可编辑地形 网格 原理讲解 17.8.8
- CODE大全告诉你java是否开始没落了
- GAN公式原理推到
- Spring(六)SSM(Spring3+Struts2+MyBatis+JDK1.7)
- js事件实现通过键盘移动图片
- Nginx配置参数详解
- HTML的TextArea标记跟随文本内容自动设置高度
- leetcode--Lowest Common Ancestor of a Binary Search Tree
- Java 详解 JVM 工作原理和流程