首页 > 其他分享 >Unity shader 里面使用数组

Unity shader 里面使用数组

时间:2023-12-14 23:56:24浏览次数:34  
标签:MainTex uv vertex shader Unity 数组 float4 100

很多人不知道 Unity shader 是支持通过 C# 脚本,往 shader 脚本里写入数组的。我不知道Properties里面怎么写,但是可以用C#代码往里写。

数组的总长度似乎最大2048。注意,是所有数组的总长度加一起不能超过2048。比如你写了五个数组,每个数组的长度是100,五个数组的总长度就是500。不是哪一个数组的长度不能超过2048,是所有数组的总长度不能超过2048。

uniform float4 _Points[100];

下面是举例:

Shader "Unlit/NewUnlitShader"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            // make fog work
            #pragma multi_compile_fog

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                UNITY_FOG_COORDS(1)
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            uniform float4 _Points[100];

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                UNITY_TRANSFER_FOG(o,o.vertex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.uv);
                // apply fog
                UNITY_APPLY_FOG(i.fogCoord, col);
                return col;
            }
            ENDCG
        }
    }
}

写入就和别的一样:

float[] fArray = new float[100];

material.SetFloatArray("_Points", fArray);

 

标签:MainTex,uv,vertex,shader,Unity,数组,float4,100
From: https://www.cnblogs.com/HaiShengJiGeYue/p/17902488.html

相关文章

  • 函数实现一维数组基本操作
    论如何用一个代码实现一堆数字的排序,删除,插入,查找。这当然少不了我们在数组上的操作,将这些看成一个个小功能,接下来我们为了使结构直观,这里我用函数来实现这些功能首先是声明//功能voidFunction();//排序voidSort(inti,intnum);//查找voidFind(intz);//插入voidIn......
  • 代码随想录算法训练营第二天| LeetCode977.有序数组的平方、209.长度最小的子数组、59
    LeetCode977.有序数组的平方●今日学习的文章链接和视频链接代码随想录(programmercarl.com) 题目链接977.有序数组的平方-力扣(LeetCode) ●自己看到题目的第一想法昨天正好做了这道题目,总体来说就是用双指针法,要么从绝对值最小的数开始排序,要么从绝对值最大的数开......
  • 代码随想录算法训练营第二天|977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵
    LeetCode977有序数组的平方题目链接:977.有序数组的平方思路:双指针,由两侧向中间逼近 LeetCode 209.长度最小的子数组题目链接:209.长度最小的子数组思路:滑动窗口,关键点滑动窗口起始点和终止点位置关系的确定 LeetCode 59.螺旋矩阵题目链接:59.螺旋矩阵关键点:循环处理......
  • java基础语法之一维数组的应用案例
    一:概述在前面已经介绍了一维数组的相关语法知识,下面来讲一下具体案例的实现。二:具体说明<1>数组的遍历数组遍历指的是:获取数组中的每一个元素,我们可以把获取到的元素输出在控制台具体代码和运行截图如下:publicstaticvoidmain(String[]args){//定义数组并初始化......
  • Unity引擎2D游戏开发,实现跳跃动画
    由于跳跃动画分为了很多个部分,所以需要对每个部分进行重新命名。接着,再将此动画分为两大类,一类空中动作(Jumpanimation),一类落地动作(Landinganimation)选择Player人物,在下方Animation中,新建动画动画新建和命名规则,根据guide内的颜色分类来进行新建动画混合树由于动画太多,......
  • Unity引擎2D游戏开发,实现按键行走
    既然是实现按下按键进行一个动作,比如行走动作。那么就需要在InputControl内加入按键,并通过C#代码调用这个按键绑定一个事件来实现此功能在InputControl内加入新的按键打开PlayerInputControl创建一个新的按键组,并绑定Shift(通过Shift键控制行走动作)通过C#代码调用按键,并实......
  • 对象的数据处理方法,要对对象属性进行数组操作(list数组中每一项与column数组中的valu
       //需要对对象属性进行数组操作时,使用Object.entries()方法    varlist=['V11046_052','V11046_051','V11046_50','V11046_0511'];    varcolumn=[{'观测时间':'D_DATETIME'},{'小时内极大风速出现时间':'V......
  • 稀疏数组
    https://blog.csdn.net/baolingye/article/details/99943083packagecom.chen.Two;/***@authorChen*@date2023年12月14日11:05*/publicclassSparseArray{publicstaticvoidmain(String[]args){int[][]array1=newint[11][11];//起始数组......
  • 编写一个程序,记录捐助给“维护合法权利团体”的资金。该程序要求用户输入捐献者数目,然
    编写一个程序,记录捐助给“维护合法权利团体”的资金。该程序要求用户输入捐献者数目,然后要求用户输入每一个捐献者的姓名和款项。这些信息被储存在一个动态分配的结构数组中。每个结构有两个成员:用来储存姓名的字符数组(或string对象)和用来存储款项的double成员。读取所有的......
  • 力扣146 螺旋遍历二维数组
    Problem: LCR146.螺旋遍历二维数组思路多个循环螺旋模拟classSolution{public:vector<int>spiralArray(vector<vector<int>>&array){vector<int>res;intm=array.size();if(m==0){returnres;}......