Объявление
public void SetMatrix(string name, Matrix4x4 value);public void SetMatrix(int nameID, Matrix4x4 value);
Параметры
nameID | Идентификатор имени свойства. Чтобы получить его, используйте Shader.PropertyToID. |
name | Имя свойства, например. "_CubemapRotation". |
value | Значение матрицы для установки. |
Описание
Задает именованную матрицу для шейдера.
В основном это используется с пользовательскими шейдерами, которым нужны дополнительные параметры матрицы. Параметры матрицы не отображаются в инспекторе материалов, но их можно задать и запросить с помощью SetMatrix
и GetMatrix
из скриптов.
Смотрите так же: GetMatrix, Materials, ShaderLab documentation, Shader.PropertyToID, Properties in Shader Programs.
using UnityEngine;
public class ExampleClass : MonoBehaviour
{
// Присоединиться к объекту с компонентом Renderer,
// и использовать материал с шейдером ниже.
public float rotateSpeed = 30f;
public void Update()
{
// Construct a rotation matrix and set it for the shader
Quaternion rot = Quaternion.Euler(0, 0, Time.time * rotateSpeed);
Matrix4x4 m = Matrix4x4.TRS(Vector3.zero, rot, Vector3.one);
GetComponent<Renderer>().material.SetMatrix("_TextureRotation", m);
}
}
// Use this shader on an object together with the above example script.
// Шейдер преобразует координаты текстуры с помощью набора матриц из скрипта.
Shader "RotatingTexture"
{
Properties
{
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct v2f
{
float2 uv : TEXCOORD0;
float4 pos : SV_POSITION;
};
float4x4 _TextureRotation;
v2f vert (float4 pos : POSITION, float2 uv : TEXCOORD0)
{
v2f o;
o.pos = UnityObjectToClipPos(pos);
o.uv = mul(_TextureRotation, float4(uv,0,1)).xy;
return o;
}
sampler2D _MainTex;
fixed4 frag (v2f i) : SV_Target
{
return tex2D(_MainTex, i.uv);
}
ENDCG
}
}
}