Add a vector material property.
// Draws 3 meshes with the same material but with different colors. var aMesh : Mesh; var aMaterial : Material = new Material(Shader.Find("VertexLit")); function Update() { var materialProperty : MaterialPropertyBlock = new MaterialPropertyBlock(); // red mesh materialProperty.Clear(); materialProperty.AddVector("_Color",Vector4(1,0,0,0.5)); Graphics.DrawMesh(aMesh, Vector3(0,0,0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); // green mesh materialProperty.Clear(); materialProperty.AddVector("_Color",Vector4(0,1,0,0.5)); Graphics.DrawMesh(aMesh, Vector3(5,0,0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); // blue mesh materialProperty.Clear(); materialProperty.AddVector("_Color", Vector4(0,0,1,0.5)); Graphics.DrawMesh(aMesh, Vector3(-5,0,0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); }
using UnityEngine; using System.Collections; public class Example : MonoBehaviour { public Mesh aMesh; public Material aMaterial = new Material(Shader.Find("VertexLit")); void Update() { MaterialPropertyBlock materialProperty = new MaterialPropertyBlock(); materialProperty.Clear(); materialProperty.AddVector("_Color", new Vector4(1, 0, 0, 0.5F)); Graphics.DrawMesh(aMesh, new Vector3(0, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); materialProperty.Clear(); materialProperty.AddVector("_Color", new Vector4(0, 1, 0, 0.5F)); Graphics.DrawMesh(aMesh, new Vector3(5, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); materialProperty.Clear(); materialProperty.AddVector("_Color", new Vector4(0, 0, 1, 0.5F)); Graphics.DrawMesh(aMesh, new Vector3(-5, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); } }
import UnityEngine import System.Collections public class Example(MonoBehaviour): public aMesh as Mesh public aMaterial as Material = Material(Shader.Find('VertexLit')) def Update() as void: materialProperty as MaterialPropertyBlock = MaterialPropertyBlock() materialProperty.Clear() materialProperty.AddVector('_Color', Vector4(1, 0, 0, 0.5F)) Graphics.DrawMesh(aMesh, Vector3(0, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty) materialProperty.Clear() materialProperty.AddVector('_Color', Vector4(0, 1, 0, 0.5F)) Graphics.DrawMesh(aMesh, Vector3(5, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty) materialProperty.Clear() materialProperty.AddVector('_Color', Vector4(0, 0, 1, 0.5F)) Graphics.DrawMesh(aMesh, Vector3(-5, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty)
nameID
is faster. If you are adding properties with the same name repeatedly,
use Shader.PropertyToID to get unique identifier for the name, and pass the identifier to AddVector.// Draws 3 meshes with the same material but with different colors. // 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("_Color"); // red mesh materialProperty.Clear(); materialProperty.AddVector(tagID,Vector4(1,0,0,0.5)); Graphics.DrawMesh(aMesh, Vector3(0,0,0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); // green mesh materialProperty.Clear(); materialProperty.AddVector(tagID,Vector4(0,1,0,0.5)); Graphics.DrawMesh(aMesh, Vector3(5,0,0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); // blue mesh materialProperty.Clear(); materialProperty.AddVector(tagID, Vector4(0,0,1,0.5)); Graphics.DrawMesh(aMesh, Vector3(-5,0,0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); }
using UnityEngine; using System.Collections; public class Example : MonoBehaviour { public Mesh aMesh; public Material aMaterial = new Material(Shader.Find("VertexLit")); void Update() { MaterialPropertyBlock materialProperty = new MaterialPropertyBlock(); int tagID = Shader.PropertyToID("_Color"); materialProperty.Clear(); materialProperty.AddVector(tagID, new Vector4(1, 0, 0, 0.5F)); Graphics.DrawMesh(aMesh, new Vector3(0, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); materialProperty.Clear(); materialProperty.AddVector(tagID, new Vector4(0, 1, 0, 0.5F)); Graphics.DrawMesh(aMesh, new Vector3(5, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); materialProperty.Clear(); materialProperty.AddVector(tagID, new Vector4(0, 0, 1, 0.5F)); Graphics.DrawMesh(aMesh, new Vector3(-5, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty); } }
import UnityEngine import System.Collections public class Example(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('_Color') materialProperty.Clear() materialProperty.AddVector(tagID, Vector4(1, 0, 0, 0.5F)) Graphics.DrawMesh(aMesh, Vector3(0, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty) materialProperty.Clear() materialProperty.AddVector(tagID, Vector4(0, 1, 0, 0.5F)) Graphics.DrawMesh(aMesh, Vector3(5, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty) materialProperty.Clear() materialProperty.AddVector(tagID, Vector4(0, 0, 1, 0.5F)) Graphics.DrawMesh(aMesh, Vector3(-5, 0, 0), Quaternion.identity, aMaterial, 0, null, 0, materialProperty)