【Unity Shader】Properties属性定义中bool类型无法使用的替代

本文介绍了在Unity Shader中遇到的布尔类型限制,并展示了如何通过将bool转换为float并利用Toggle标签创建复选框来实现类似功能。通过Toggle,可以轻松判断变量是否为默认值,便于编程控制。
摘要由CSDN通过智能技术生成

在shader的Properties属性定义中,无法使用bool类型变量,如下写法会报错。

_IsTrue("Istrue", bool) = true

可以使用float类型+toggle标签来代替

[Toggle(_True)]_IsTrue("Istrue", float) = 1

增加Toggle标签后,在Inspector面板中,该变量为复选框。

勾选即为默认值,取消勾选则不是默认值。

在需要判断的地方,判断_IsTrue是否为默认值即可。

UnityShader,要在High-Level Shader Language (HLSL) 启用深度测试,你需要在着色器脚本设置`DepthTest`和`DepthWrite`标记。通常这会在顶点着色器(VS)和片段着色器(FS)完成。以下是基本步骤: 1. **打开Unity项目**,定位到Shader文件,找到你要编辑的Material或Surface Shader。 2. **打开着色器脚本**,通常是`.hlsl`或`.cginc`文件。如果你使用的是Unity内置的Shader Graph,可以在`Properties`部分找到相关的输入节点。 3. **在顶点着色器**(Vertex shader添加以下行,启用深度测试: ```hlsl bool _EnableDepthTest; // 在Properties部分声明布尔属性 vertex_out VS_OUTPUT { ... }; VS_OUTPUT VS(float4 vertex : POSITION, float4 uv : TEXCOORD0, uint id : SV_VertexID) { ... VS_OUTPUT output; output.position = UnityObjectToClipPos(vertex); output.depth = depth; // 记录物体深度 output.enableDepthTest = _EnableDepthTest; // 设置深度测试标志 ... } ``` 4. **在片段着色器**(Fragment shader同样设置深度写入: ```hlsl bool _EnableDepthWrite; fixed4 frag(PS_INPUT input) : SV_Target { ... if (_EnableDepthWrite) // 如果深度写入开关打开,则保存深度值 output.Depth = input.depth; ... } ``` 5. **最后,在Unity编辑器内**,通过`Material」>「Render Settings」> 「Advanced」> `Shader Graph」或`Standard Render Pipeline」> `Graphics Pipeline」设置,调整你的图形管道并启用`Depth Test`和`Depth Write`开关。 6. **在Shader程序行为上**,你可以通过`_EnableDepthTest`和`_EnableDepthWrite`这两个属性来控制着色器是否启用深度测试和写入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真鬼123

祝你节节高升岁岁平安越来越漂亮

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值