Устанавливает именованную матрицу для шейдера.
В основном это используется для пользовательских шейдеров, которые нуждаются в дополнительных
параметрах матрицы. Параметры матрицы не выставлены в инспекторе материала,
но могут быть установлены и запрошены с SetMatrix
и GetMatrix
из скриптов.
See Also: GetMatrix, Materials, ShaderLab documentation, Shader.PropertyToID.
using UnityEngine;
public class ExampleClass : MonoBehaviour { // Attach to an object that has a Renderer component, // and use material with the shader below. 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. // The shader transforms texture coordinates with a matrix set from a 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 = mul(UNITY_MATRIX_MVP, 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 } } }