float型のマテリアルプロパティを追加します
// Draws 3 meshes with the same material but with different Shininess levels var aMesh : Mesh; var aMaterial : Material = new Material(Shader.Find("VertexLit")); function Update() { var materialProperty : MaterialPropertyBlock = new MaterialPropertyBlock(); // Not shiny materialProperty.Clear(); materialProperty.AddFloat("_Shininess", 1.0); Graphics.DrawMesh(aMesh, Vector3(0,0,0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); // More or less shiny materialProperty.Clear(); materialProperty.AddFloat("_Shininess", 0.5); Graphics.DrawMesh(aMesh, Vector3(5,0,0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); // Shiny materialProperty.Clear(); materialProperty.AddFloat("_Shininess", 0.0); Graphics.DrawMesh(aMesh, Vector3(-5,0,0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); }
using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { public Mesh aMesh; public Material aMaterial = new Material(Shader.Find("VertexLit")); void Update() { MaterialPropertyBlock materialProperty = new MaterialPropertyBlock(); materialProperty.Clear(); materialProperty.AddFloat("_Shininess", 1.0F); Graphics.DrawMesh(aMesh, new Vector3(0, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); materialProperty.Clear(); materialProperty.AddFloat("_Shininess", 0.5F); Graphics.DrawMesh(aMesh, new Vector3(5, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); materialProperty.Clear(); materialProperty.AddFloat("_Shininess", 0.0F); Graphics.DrawMesh(aMesh, new Vector3(-5, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); } }
import UnityEngine import System.Collections public class ExampleClass(MonoBehaviour): public aMesh as Mesh public aMaterial as Material = Material(Shader.Find('VertexLit')) def Update() as void: materialProperty as MaterialPropertyBlock = MaterialPropertyBlock() materialProperty.Clear() materialProperty.AddFloat('_Shininess', 1.0F) Graphics.DrawMesh(aMesh, Vector3(0, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty) materialProperty.Clear() materialProperty.AddFloat('_Shininess', 0.5F) Graphics.DrawMesh(aMesh, Vector3(5, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty) materialProperty.Clear() materialProperty.AddFloat('_Shininess', 0.0F) Graphics.DrawMesh(aMesh, Vector3(-5, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty)
/nameID/ でこの関数を呼び出すほうが高速になります。もし、繰り返し同じ名前のプロパティを追加する場合は、 Shader.PropertyToIDを使用してプロパティ名のユニークIDを取得し、AddFloatにIDを渡します。
// Draws 3 meshes with the same material but with different Shininess levels // Using the material tag ID. var aMesh : Mesh; var aMaterial : Material = new Material(Shader.Find("VertexLit")); function Update() { var materialProperty : MaterialPropertyBlock = new MaterialPropertyBlock(); var tagID : int = Shader.PropertyToID("_Shininess"); // Not shiny materialProperty.Clear(); materialProperty.AddFloat(tagID, 1.0); Graphics.DrawMesh(aMesh, Vector3(0,0,0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); // More or less shiny materialProperty.Clear(); materialProperty.AddFloat(tagID, 0.5); Graphics.DrawMesh(aMesh, Vector3(5,0,0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); // Shiny materialProperty.Clear(); materialProperty.AddFloat(tagID, 0.0); Graphics.DrawMesh(aMesh, Vector3(-5,0,0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); }
using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { public Mesh aMesh; public Material aMaterial = new Material(Shader.Find("VertexLit")); void Update() { MaterialPropertyBlock materialProperty = new MaterialPropertyBlock(); int tagID = Shader.PropertyToID("_Shininess"); materialProperty.Clear(); materialProperty.AddFloat(tagID, 1.0F); Graphics.DrawMesh(aMesh, new Vector3(0, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); materialProperty.Clear(); materialProperty.AddFloat(tagID, 0.5F); Graphics.DrawMesh(aMesh, new Vector3(5, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); materialProperty.Clear(); materialProperty.AddFloat(tagID, 0.0F); Graphics.DrawMesh(aMesh, new Vector3(-5, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); } }
import UnityEngine import System.Collections public class ExampleClass(MonoBehaviour): public aMesh as Mesh public aMaterial as Material = Material(Shader.Find('VertexLit')) def Update() as void: materialProperty as MaterialPropertyBlock = MaterialPropertyBlock() tagID as int = Shader.PropertyToID('_Shininess') materialProperty.Clear() materialProperty.AddFloat(tagID, 1.0F) Graphics.DrawMesh(aMesh, Vector3(0, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty) materialProperty.Clear() materialProperty.AddFloat(tagID, 0.5F) Graphics.DrawMesh(aMesh, Vector3(5, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty) materialProperty.Clear() materialProperty.AddFloat(tagID, 0.0F) Graphics.DrawMesh(aMesh, Vector3(-5, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty)