版本: Unity 6 (6000.0)
语言英语
  • C#

Material.SetMatrix

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交的内容,但我们确实会阅读用户提出的每一个建议,并在适用时进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换到手册

声明

public void SetMatrix(string name, Matrix4x4 value);

声明

public void SetMatrix(int nameID, Matrix4x4 value);

参数

nameID 属性名称 ID,使用 Shader.PropertyToID 获取。
name 属性名称,例如 “_CubemapRotation”。
value 要设置的矩阵值。

描述

为着色器设置一个命名的矩阵。

这主要用于需要额外矩阵参数的自定义着色器。矩阵参数不会在材质检查器中公开,但可以使用脚本中的 SetMatrixGetMatrix 设置和查询。

其他资源: 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 } } }