在 Unity3D 中向着色器添加 alpha

2023-12-20

我对着色器编程一无所知,但现在我需要将 alpha 添加到我想要使用的着色器中。实际上我想淡入和淡出我的精灵,但它不在我使用的着色器中。

Shader :

Shader "Sprites/ClipArea2Sides"
{
    Properties
    {
        _MainTex ("Base (RGB), Alpha (A)", 2D) = "white" {}
        _Length ("Length", Range(0.0, 1.0)) = 1.0
        _Width ("Width", Range(0.0, 1.0)) = 1.0
     }

    SubShader
    {
        LOD 200

        Tags
        {
            "Queue" = "Transparent"
            "IgnoreProjector" = "True"
            "RenderType" = "Transparent"
        }

        Pass
        {
            Cull Off
            Lighting Off
            ZWrite Off
            Offset -1, -1
            Fog { Mode Off }
            ColorMask RGB
            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            sampler2D _MainTex;
            float4 _MainTex_ST;
            float _Length;
            float _Width;

            struct appdata_t
            {
                float4 vertex : POSITION;
                float2 texcoord : TEXCOORD0;
            };

            struct v2f
            {
                float4 vertex : POSITION;
                float2 texcoord : TEXCOORD0;
            };

            v2f vert (appdata_t v)
            {
                v2f o;
                o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                o.texcoord = v.texcoord;
                return o;
            }

            half4 frag (v2f IN) : COLOR
            {
                if ((IN.texcoord.x<0) || (IN.texcoord.x>_Width) || (IN.texcoord.y<0) || (IN.texcoord.y>_Length))
                {
                    half4 colorTransparent = half4(0,0,0,0) ;
                    return colorTransparent ;
                }
                else
                    return tex2D(_MainTex, IN.texcoord) ;
            }
            ENDCG
        }
    }
}

像这样的着色器:http://wiki.unity3d.com/index.php/UnlitAlphaWithFade http://wiki.unity3d.com/index.php/UnlitAlphaWithFade

由于性能原因,我需要针对移动设备优化 alpha。

Answer

非常感谢阿纳斯·伊克巴尔。

这是一个具有剪辑区域+色调的着色器:

Shader "Sprites/TestShader"
{
    Properties
    {
        _Color ("Color Tint", Color) = (1,1,1,1)
        _MainTex ("Base (RGB), Alpha (A)", 2D) = "white" {}
        _Length ("Length", Range(0.0, 1.0)) = 1.0
        _Width ("Width", Range(0.0, 1.0)) = 1.0
     }

    SubShader
    {
        LOD 200

        Tags
        {
            "Queue" = "Transparent"
            "IgnoreProjector" = "True"
            "RenderType" = "Transparent"
        }

        Pass
        {
            Cull Off
            Lighting Off
            ZWrite Off
            Offset -1, -1
            Fog { Mode Off }
            ColorMask RGB
            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            sampler2D _MainTex;
            float4 _MainTex_ST;
            float _Length;
            float _Width;
            half4 _Color;

            struct appdata_t
            {
                float4 vertex : POSITION;
                float2 texcoord : TEXCOORD0;
            };

            struct v2f
            {
                float4 vertex : POSITION;
                float2 texcoord : TEXCOORD0;
                half4 color : COLOR;
            };

            v2f vert (appdata_t v)
            {
                v2f o;
                o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                o.texcoord = v.texcoord;
                o.color = _Color;
                return o;
            }

            half4 frag (v2f IN) : COLOR
            {
                if ((IN.texcoord.x<0) || (IN.texcoord.x>_Width) || (IN.texcoord.y<0) || (IN.texcoord.y>_Length))
                {
                    half4 colorTransparent = half4(0,0,0,0) ;
                    return colorTransparent;
                }
                else
                {
                    half4 tex = tex2D(_MainTex, IN.texcoord);
                    tex.a = IN.color.a;
                    return tex;
                }
            }
            ENDCG
        }
    }
}

将此行添加到您的Properties

_Color ("Color Tint", Color) = (1,1,1,1)

然后在下面添加这一行float _Width;

half4 _Color;

更新你的struct v2f并在其中添加一个颜色变量。

struct v2f
{
    float4 vertex : POSITION;
    float2 texcoord : TEXCOORD0;
    half4 color : COLOR;
};

然后你可以在你的v2f vert像这样:

o.color = _Color

或者如果您只想分别使用 RGB 和 alpha

o.color.rgb = _Color.rgb
o.color.a = _Color.a

OR

o.color.r = _Color.r
o.color.g = _Color.g
o.color.b = _Color.b
o.color.a = _Color.a

之后你可以返回你的颜色值half4 frag (v2f IN) : COLOR method

// do something with your color if you want
// you can also play with alpha here
return IN.color;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Unity3D 中向着色器添加 alpha 的相关文章

  • Newtonsoft.Json 可在 Unity 编辑器中运行,但无法在移动设备上运行

    我正在 Unity 中编写一个按类别提问和回答的游戏 类别是通过返回 JSON 文本的 PHP 脚本获取的 当我在 UnityEditor 中使用此解决方案时 它可以正常工作 但是当我在移动设备上安装 apk 时 反序列化不起作用 与 my
  • 如何在移动设备上使用Unity3d实现多点触控?

    I use OnMouseDown 可以处理按压 但不可能实现多点触控 该程序包括当您点击时增加然后减少的对象 如果轻轻一按 一切都会正常 但是 当您尝试同时单击多个对象时 它不起作用 我正在尝试解决该问题 但它不起作用 对象无法缩放并且多
  • Unity3D 与 UIView 集成

    如果这个问题重复 请纠正我 我刚刚接触到Unity3D 我只是想问是否可以将Unity3D集成到其他UIView之上 我认为这是不可能的 因为生成的 AppController mm 充当UIApplicationDelegate 即使你设
  • 在 Unity 中双向旋转门

    我在 Unity 中创建了一扇打开和关闭的门 我可以通过打电话打开那扇门Interact 现在我想创建一扇始终远离玩家打开的门 就像酒吧的门一样 如果玩家在房间前面 门就会旋转到房间 如果玩家在房间里 门就会旋转出去 目前我创建了一个布尔值
  • 2D 弹跳公式无法正常工作

    我是 Unity 的新手 我正在尝试创建一个弹跳球 所以我做了很多关于弹跳相关物理的研究 我找到了一个公式 Formula 2 V dot N N V 其中 V 是速度矢量 N 是球弹跳表面的法线 这是我的脚本 using UnityEng
  • CSS3 - 在精灵图像的“背景位置”之间淡入淡出

    我想在精灵图像的 背景位置 之间淡入淡出仅使用CSS 我找到了很多教程 但没有找到像这样简单的东西
  • jquery悬停图像淡入淡出交换

    我已经在网上搜索了一段时间 试图找到编写 jquery 脚本的最佳方法来完成这个简单的任务 用优雅的淡入淡出效果交换悬停时的图像 我找到了很多解决方案 有些方法很麻烦和笨重 并将其缩小到我认为最好的两个 http designwoop co
  • 如何在编辑器中将动画曲线更改为线性?

    我向轮子添加了旋转动画 但轮子旋转不顺畅 我发现原因是因为旋转动画的曲线不是线性的 然而 在尝试了编辑器中的几乎所有按钮和选项后 我找不到使动画曲线成为线性的方法 有谁知道如何在统一编辑器中获取带有线性曲线的动画 我自己找到了解决方案 而且
  • 查找游戏对象的子对象的子对象

    我在场景中有一个预制件 我想访问该预制件的子项 该预制件的结构如下 PauseMenu UI Resume TextField TextField2 UI Side Back lt I need this child UI Home tra
  • 如何将字节数组转换为任何类型

    好的 我看到有人问如何将字节数组转换为int string Stream等等 答案各不相同 我个人还没有找到任何令人满意的答案 这里有一些我们想要将字节数组转换成的类型 UnityEngine Font可以吸收ttf data UnityE
  • CPU 到 GPU 法线映射

    我正在创建一个地形网格 然后这个答案 https stackoverflow com a 5284527 1356106我正在尝试将 CPU 计算法线迁移到基于着色器的版本 以便通过降低网格分辨率并使用在片段着色器中计算的法线贴图来提高性能
  • 如何在Unity中集成xAPI / TinCan

    我是 xAPI TinCan API 的新手 所以我的问题可能有点笼统 但到目前为止我还没有找到任何可以帮助我的东西 我认为可以将 xAPI 集成到 Unity 项目 游戏或模拟 中 但我到底该怎么做呢 我可以阅读有关 xAPI 和 Uni
  • Unity3D 播放器在石头上行走

    大家好 我的玩家正在石头上行走并穿过石头 名为 Champ 的玩家有一个 Box Collider 而 Stone 有一个 Mesh Collider 玩家也有刚体 我尝试了我发现的一切 但没有任何帮助我解决我的问题 MovePlayer
  • 如何在Python中设置像素的alpha值

    我正在尝试编辑image https drive google com file d 0B8JcwRV HVk0OURrcTFJczhmV2RlUGdMOG0ybldYUVRoamtF view usp sharing以一种将所有白色像素转
  • Unity3D:在 AA 解析后绘制粒子以提高性能

    我正在尝试评估 MSAA 对 Unity 中含有大量粒子的场景的影响 为此 我需要 使用 8x MSAA 绘制场景中的所有非粒子对象 使用上一个通道中解析的深度缓冲区来渲染所有 将非遮挡粒子系统转移到较小的渲染目标上 将 2 的颜色缓冲区与
  • unity 3d 根据加速度计旋转游戏对象

    我想做一款类似 神庙逃亡 的游戏 我需要根据设备倾斜的程度来旋转播放器的平台 我正在尝试加速计 但无法使游戏对象倾斜 请指导我 谢谢 这是我的代码 我之前在注释中使用了代码 现在我尝试使用注释中的代码 public class tilt M
  • 在速度和距离不一致和/或有噪声的向量之间平滑地进行调整

    我正在可视化一级方程式赛车中提供的 GPS 数据 并尝试以动画方式显示它们在路径上的位置 Formula 1 API 提供矢量坐标和时间戳 但时间戳各不相同 它们的更新时间大约在 100 到 400 毫秒之间 timestamp x y z
  • 使用 OpenGL 着色器进行数学计算 (C++)

    我有一个矩阵 例如 100x100 尺寸 我需要对每个元素进行计算 matrix i j tt 8 5例如 我有一个巨大的矩阵 我想使用 OpenGL 着色器来实现该算法 我想使用着色器 例如 uniform float val unifo
  • Unity - 在生成时获取随机颜色

    我有一个小问题 我想在我的场景中生成四边形 它们都应该有红色或绿色作为材质 但 Random Range 函数只能是 int 我该如何解决它 void SpawningSquadsRnd rndColor 0 Color red rndCo
  • 无法使用 Unity 函数在 Visual Studio Code 中获得完整的 Intellisense

    好吧 我知道这个问题已经被问过并回答过很多次了 但我花了大约 3 天的时间试图解决这个问题 但到目前为止我所做的一切都没有奏效 我基本上在 Visual Studio Code 中有部分智能感知 也就是说 它似乎只识别 Unity 类和变量

随机推荐

  • 将 ComboBoxColumn 绑定到 WPF DataGrid 中 DataGrid 的 ItemsSource 的集合

    请帮助我弄清楚如何在 WPF 的 DataGrid 中使用 ComboBoxColumn 我正在尝试创建一个设备列表 其中每个设备在 日志 字段中都有动态状态列表
  • AngularJS ui-router 登录验证

    我是 AngularJS 的新手 我对如何在以下场景中使用 Angular ui router 感到有点困惑 我正在构建一个由两部分组成的网络应用程序 第一部分是带有登录和注册视图的主页 第二部分是仪表板 成功登录后 我创建了一个index
  • 设计数据仓库、事实表和维度表的逻辑模型

    你好 我是数据仓库的新手 作业要求我实现逻辑设计 物理和实现 你会如何在数据仓库中对此进行建模 我希望设计一个数据仓库来给出与棒球联盟相关的统计数据的答案 对于玩家 进攻中 击球手击球次数 得分是多少 安打次数 双打和三打数 打了多少个本垒
  • 提取模式后的字符串

    我想提取 client id 和 id 之后的数字 并将每行中的 client id 和 id 配对 例如 对于以下日志行 User client id 03 results RelatedUser id 204 weight 10 Rel
  • 没有名为 fcntl 的模块

    我正在尝试使用 IronPython 2 7 在 NET 4 0 上使用 IronPython 执行此方法 我使用的是 Windows 7 import os import re import nltk import urllib impo
  • 如何在 JavaScript 中检查 JSON 字符串是否有值?

    有什么方法可以检查 json 字符串是否具有值 字符或字符串 这是示例 firstName John lastName Smith age 25 address streetAddress 21 2nd Street city New Yo
  • WPF 某些图像在加载时会旋转

    我是 WPF 新手 找不到解决方法 我有一个在 XAML 中定义的基本图像控件 我正在将位图图像动态加载到此控件 问题是 当加载图像控件时 某些位图在图像控件中翻转 并且我想以其默认方向加载所有图像 这是我的 XAML
  • Pyspark 与 Elasticsearch

    我将 Pyspark 与 Elasticsearch 结合使用 我注意到 当您创建 RDD 时 它不会在任何收集 计数或任何其他 最终 操作之前执行 当我将转换后的 RDD 的结果用于其他事情时 是否可以执行和缓存转换后的 RDD 正如我在
  • 正则表达式检测字符重复

    我使用表达式来检测字符串中重复的一个字符 if str replace g length gt 1 现在 我希望检测到多个重复的字符 例如 让我们尝试检测 或 的重复项 Wordwithone here match Word withdup
  • 如果未安装.NET 3.5,如何避免 FileNotFoundException?

    如果您尝试在未安装此版本 NET Framework 的 Windows 计算机上启动 NET 3 5 应用程序 您会收到FileNotFoundException对于某些系统程序集 例如 System Core 3 5 0 0 是否可以捕
  • 将 UIButton 旋转 360 度

    我一直在尝试运行一个旋转我的动画UIButton360 度使用此代码 UIView animateWithDuration 3 0 animations self vineTimeCapButton transform CGAffineTr
  • 将对象设置为 nil 时不会调用 dealloc 方法

    我有个问题 我首先创建了一个扩展 NSObject 的对象 我提供了描述和 dealloc 方法的重写 这是我的 Employee m 文件 implementation Employee NSString description retu
  • 错误:不兼容的类型:Fragment 无法转换为 MapFragment

    在我的项目中 我使用带有选项卡的导航抽屉 在其中一个选项卡中 我想调用谷歌地图 但我遇到了这个错误 Error incompatible types Fragment cannot be converted to MapFragment 包
  • .NET Core DI,为包注册默认实现

    如何使用 NET Core 的 IoC 容器注册默认实现 并提供一种覆盖现有实现的方法 例如 我可能想创建一个包 为某些服务提供默认实现 namesapce Package public interface ISomeService pub
  • 使用脚本打印 Google Sheet 中下拉列表中的所有选项 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有人有任何脚本可以让我使用 Google Sheet 中的应用程序脚本打印 Drop Down 中的
  • 如何跳过在 htmlwidgets::saveWidget() 中编写依赖项?

    当用plotly可视化数据时 我想将小部件编写为html文档 而不需要htmlwidgets saveWidget每次都编写依赖项 假设这些依赖项已经就位 以节省处理时间 小部件需要是独立的以节省磁盘空间 library plotly t
  • YouTube API 配额为零 [重复]

    这个问题在这里已经有答案了 我正在尝试使用 youtube api 来收集项目的一些数据 为此 我使用带有从电子邮件帐户获取的刷新令牌的微服务来生成 accessToken 但是 每当我使用生成的令牌时 我都会收到一条回复 说我已达到配额上
  • primefaces bar 图表自定义 x 轴

    我的应用程序中有 p barchart 图 类似于展示案例中的第二个条形图 http www primefaces org showcase ui barChart jsf http www primefaces org showcase
  • C++ 布尔值短路

    我是 C 新手 很好奇编译器如何处理布尔值的惰性求值 例如 if A 1 B 2 如果 A 等于 1 B 2 部分是否会被求值 No the B 2部分不予评价 这就是所谓的短路评估 http en wikipedia org wiki S
  • 在 Unity3D 中向着色器添加 alpha

    我对着色器编程一无所知 但现在我需要将 alpha 添加到我想要使用的着色器中 实际上我想淡入和淡出我的精灵 但它不在我使用的着色器中 Shader Shader Sprites ClipArea2Sides Properties Main