Unity中动态改变物体的Material(Shader)
2017-05-27 22:12
1366 查看
在Unity中,我们在进行物体控制和交互过程中经常会涉及到动态改变Shader的情况,如将一个三维物体用网格显示、将三维物体的表现形式进行变更等等。
在Unity中主要通过MeshRenderer组件进行控制,我们可以通过获取指定物体的MeshRenderer组件,对其中的属性进行赋值即可改变属性。
在一些情况下,某一个物体的Material部分包含多个材质,在这种情况下,我们可以通过
来获取所有的材质,通过对特定的材质进行动态赋值可以改变其中的属性。
当我们需要在不同种类的Material间切换时,可以将每种不同类型的Material都保存到特定的数据结构中
我们通过定义不同类型的Material[]数组,根据物体的名称来动态加载和保存。
在Unity中主要通过MeshRenderer组件进行控制,我们可以通过获取指定物体的MeshRenderer组件,对其中的属性进行赋值即可改变属性。
Material material = new Material(Shader.Find("Transparent/Diffuse")); material.color = Color.green; //material.SetVector("_Color",new Vector4(1,1,1,1)); GetComponent<Renderer>().material = material;
在一些情况下,某一个物体的Material部分包含多个材质,在这种情况下,我们可以通过
GetComponment<Renderer>().materials
来获取所有的材质,通过对特定的材质进行动态赋值可以改变其中的属性。
当我们需要在不同种类的Material间切换时,可以将每种不同类型的Material都保存到特定的数据结构中
public class NormalMaterialInfo { public string ObjectName; public Material[] ObjectMaterials; }
我们通过定义不同类型的Material[]数组,根据物体的名称来动态加载和保存。
private Material[] GetNormalMaterials(string name) { foreach (var info in normalMaterialInfoList) { if (info.ObjectName == name) { return info.ObjectMaterials; } } return null; } private void SaveMaterialInfo() { foreach (var part in Car.GetComponentsInChildren<MeshRenderer>()) { NormalMaterialInfo info = new NormalMaterialInfo(); info.ObjectMaterials = part.GetComponent<Renderer>().materials; info.ObjectName = part.name; normalMaterialInfoList.Add(info); } }
相关文章推荐
- unity 动态改变所有子物体的shader
- Unity使用Shader动态的剪切物体
- 【Unity&UGUI&Shader】创建材质球Material&代码控制更换物体材质球
- unity3d关于怎样动态改变物体 shader
- Unity 2D Toolkit中动态改变Animated Sprite的Shader
- unity shader 根据世界坐标,改变物体显示的颜色
- Unity动态创建带有Shader的Material
- 【Unity&UGUI】动态改变精灵物体的图片
- Unity中的Material和Shader<坑待填>
- Unity中通过按键改变物体颜色
- Unity中的Material和Shader<坑待填>
- unity 雷1 -- 代码动态切换material
- Unity shader教程-第三课:实践!同一个shader,多个material。
- Unity Shader 物体外轮廓 描边
- unity 改变物体的颜色
- Unity 动态改变天空盒 材质
- 关于Unity动态物体无法向使用使用custom shader和lightmap的物体投射阴影
- 【Unity资料经验总结】Unity几种改变物体或图片透明的方法
- Unity-代码中动态设置Material参数
- Unity用shader显示物体线框