如何自定义渲染一个网格
初始化工作
自定义渲染类型
- 必要组件
[RequireComponent(typeof(MeshFilter))]
[RequireComponent(typeof(MeshRenderer))]
public class CustomMesh : MonoBehaviour
[RequireComponent(typeof(XX))] 可以叠起来用,我之前是没想到过的
- 必要成员
-- 控制组件
private MeshFilter curMeshFilter; -- 自身绑定的网格筛选器
private MeshRenderer curMeshRender; -- 自身绑定的网格渲染器
-- 网格结果
private Mesh myMesh; -- 居然只要变更了这个对象的数据,cpu-自动->gpu
-- 自已持有的用来修改的具体网格数据
private Vector3[] Verts;
private Color[] Colors;
private Vector2[] UVs;
Mesh数据更新: 在Profile 里面没有检测到对 Mesh数据变更会产生gc的问题
自持数组:Verts&&Colors&&UVs 的反复创建倒是会带来gc
MeshRenderer初始化
MeshFilter初始化
myMesh = new Mesh();
CurMeshFilter.mesh = myMesh;
更新工作
Verts[0] = new Vector3(0,heightOfWorld,0);
Verts[1] = new Vector3(widthOfWorld,heightOfWorld,0);
Verts[2] = new Vector3(0,0,0);
Verts[3] = new Vector3(widthOfWorld, 0,0);
UVs[0] = new Vector2(0.0f, 1.0f);
UVs[1] = new Vector2(1f, 1f);
UVs[2] = new Vector2(0f, 0);
UVs[3] = new Vector2(1, 0);
Colors[0] = Color.white;
Colors[1] = Color.white;
Colors[2] = Color.white;
Colors[3] = Color.white;
indexs[0] = 0;
indexs[1] = 1;
indexs[2] = 2;
indexs[3] = 3;
indexs[4] = 2;
indexs[5] = 1;
/* */
myMesh.vertices = Verts;
myMesh.uv = UVs;
myMesh.colors = Colors;
myMesh.triangles = indexs;
- 很神奇的是只要修改myMesh数据就好,很好奇Mesh数据是保持一个什么频率做cpu到gpu端的更新的
- 顶点的距离单位是unity中的米,坐标系是当前节点坐标系下