Material.SetMatrix
Declaration
public void SetMatrix(string name, Matrix4x4 value);public void SetMatrix(int nameID, Matrix4x4 value);Параметры
| Параметр | Описание |
|---|---|
| nameID | Имя свойства ID, используйте Shader.PropertyToID, чтобы получить его. |
| имя | Имя свойства, e.g. "_CubemapRotation". |
| значение | Значение матрицы для установки. |
Описание
Задает именованную матрицу для шейдера.
Параметры матрицы не отображаются в инспекторе материалов, но могут быть установлены и запрошены с помощью SetMatrix и GetMatrix из скриптов.
Дополнительные ресурсы: GetMatrix, Материалы, ShaderLab документация, 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 = 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 } } }