Shader的数据接口:属性和uniform变量

  1. 在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//限定范围的浮点数
}
  1. 通过图片界面操作属性
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只会将此操作忽略,而不会报错

  1. 矩阵:不能在属性块定义的变量
    下面是在Shader中对一个矩阵的声明
uniformfloat4*4 myMatrix;

下面是在脚本中对该矩阵的读取和写入

mat.SetMatrix("myMatrix",matrix);
matrix=mat.GetMatrix("myMatrix");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值