文章目录
接上文
前面一篇文章【Unity】程序创建Mesh(一)Mesh网格、代码创建模型、顶点信息、三角形信息、MeshFilter、MeshRenderer讲了一部分使用代码创建网格的内容,这一节针对渲染相关的内容再做详解。
MeshRenderer(网格渲染器)
MeshRenderer是Unity中的一个组件,属于UnityEngine命名空间下的一个类,它继承自Renderer类。MeshRenderer的主要作用是渲染由MeshFilter或TextMesh插入的网格。它根据物体的Transform组件的定义位置,从网格过滤器(Mesh Filter)获取几何形状,并在该位置进行渲染。
MeshRenderer还有一些重要的属性,例如Cast Shadows(投射阴影),当这个属性被启用时,如果场景中有创建光照阴影的光源,MeshRenderer将会使对应的Mesh产生阴影。下面简单说明一下MeshRenderer的各项属性。
Materials(材质)
Materials是MeshRenderer中最重要的属性,它控制了网格的材质表现。通过修改MeshRenderer的Materials属性,我们可以改变物体的外观,如颜色、纹理、光照反应等。
具体来说,MeshRenderer的Materials属性是一个Material数组,这意味着一个MeshRenderer可以拥有多个材质。每个材质可以独立地应用到网格的不同部分,从而实现复杂的视觉效果。例如,一个游戏角色的身体部分可能使用一种材质,而武器或服装则使用另一种材质。
在Unity的编辑器中,你可以通过MeshRenderer组件的Inspector窗口来查看和编辑Materials属性。你可以添加、删除或重新排序材质,还可以为每个材质设置不同的Shader和纹理。
在代码中,你也可以通过脚本来操作MeshRenderer的Materials属性。例如,你可以创建一个新的Material,并将其添加到MeshRenderer的Materials数组中,或者修改现有材质的属性来改变物体的外观。
需要注意的是,当你修改MeshRenderer的Materials属性时,你是在修改该MeshRenderer的本地材质副本。如果你希望多个MeshRenderer共享相同的材质,你应该使用Material的实例化(Instance)而不是复制(Clone)。这样,当你修改共享材质的属性时,所有使用该材质的MeshRenderer都会受到影响。
此外,MeshRenderer的Materials属性与MeshFilter的mesh属性是相辅相成的。MeshFilter定义了物体的形状和结构,而MeshRenderer则通过Materials属性定义了这些形状和结构如何被渲染和表现出来。通过合理使用这两个组件,你可以创建出丰富多样的游戏世界和角色。
Material和Mesh对应
在Unity中,当你为MeshRenderer组件分配多个材质时,你需要确保这些材质与你的Mesh的子网格(Submeshes)正确对应。Mesh可以由多个子网格组成,每个子网格可以独立地应用一个材质。
为了将多个材质与Mesh的子网格对应起来,你需要按照以下步骤操作:
- 创建子网格:在你的Mesh中,使用SetTriangles方法为不同的部分设置三角形索引,从而创建子网格。每个子网格应包含一组连续的三角形索引。
int[] triangles0 = {
/* 三角形索引数组,对应第一个子网格 */ };
int[] triangles1 = {
/* 三角形索引数组,对应第二个子网格 */ };
// ...更多子网格
mesh.SetTriangles