- 在Properties块中定义属性
Properties {
_MyTexture ("Texture (RGB)",2D)="white" {}//图片形式的属性
_MyColor ("Color of Object",Color)=(1,1,1,1)//颜色属性
_MyCube ("Environment map",Cube)="white" {}//3D贴图,需要6张图片
_MyVector ("Vector",vertor)=(1,1,1,1)//4个元素的向量
_Myfloat ("Float Value",float)=1.0//浮点小数
_MyRange ("Another type of float",range(-13,14))=1.0//限定范围的浮点数
}
- 通过图片界面操作属性
using UnityEngine;
using System.Collections;
public class Test01 : MonoBehaviour
{
public Material mat;
public Texture myPic;
public Color purple;
public Cubemap cube;
public Vector4 vec;
public float val_1;
public float val_2;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
//对在Shader中定义的属性进行设置
mat.SetTexture("_MyTexture", myPic);
mat.SetColor("_MyColor", purple);
mat.SetTexture("_MyCube",cube);
mat.SetVector("_MyVector",vec);
mat.SetFloat("_MyFloat",val_1);
mat.SetFloat("_MyRange",val_2);
//对在Shader中定义的属性进行读取
myPic = mat.GetTexture("_MyTexture");
purple = mat.GetColor("_MyColor");
cube = (Cubemap)mat.GetTexture("_MyCube");
vec = mat.GetVector("_MyVector");
val_1 = mat.GetFloat("_MyFloat");
val_2 = mat.GetFloat("_MyRange");
}
}
cube属性是3D贴图,是Texture 2D贴图的子类,range属性则是一种限制了范围的float类型,本质和float 一样,如果在脚本中进行操作的属性在Shader中并不存在,那么Unity只会将此操作忽略,而不会报错
- 矩阵:不能在属性块定义的变量
下面是在Shader中对一个矩阵的声明
uniformfloat4*4 myMatrix;
下面是在脚本中对该矩阵的读取和写入
mat.SetMatrix("myMatrix",matrix);
matrix=mat.GetMatrix("myMatrix");