gpt4 book ai didi

unity3d - 将 float2/vector2 属性从着色器公开到 Unity Material 检查器

转载 作者:行者123 更新时间:2023-12-05 08:39:09 32 4
gpt4 key购买 nike

在 Unity shaderlab 着色器中,您可以将着色器属性公开给编辑器中的 Material 检查器。这可以通过将要公开的属性放在 Properties 部分中来完成,如下所示

Properties
{
_SomeFloat("A Float", float) = 5
}

Unity 在 documentation here 中定义了一个属性列表.

然而,这不包括任何形式的 float2 或 vector2,仅包括单个 Float 或由 xyzw 组成的 Vector

我尝试将属性类型设置为 float2 和 Vector2

_SomeFloat("A Float", float2) = (5,5)
_SomeFloat2("A Float2", Vector2) = (5,5)

两者都返回错误 Parse error: syntax error, unexpected TVAL_ID at line 7

或尝试通过仅设置一半成员来将 Vector 减半

_SomeFloat("A Float", Vector) = (5,5)

返回错误 Parse error: syntax error, unexpected ')', expecting ','

我可以只使用 Vector 类型并且只使用它的 xy,但这会导致 UI 不清晰,因为现在检查器中有两个未使用的元素,并且找不到 Property Attribute 或 Drawer (例如 HideInInspector),它允许您从检查器中隐藏 zw 值。

那么有没有一种方法可以使用属性类型来公开 float2?或者,您可以在标准 2D 属性类型(可能类似于 [EditorGUILayout.BeginHorizo​​ntal] [2])?

最佳答案

通过快速搜索,我发现可以扩展 MaterialPropertyDrawer 以在着色器检查器中添加自定义标签(引用:https://docs.unity3d.com/ScriptReference/MaterialPropertyDrawer.html)。

因此,您可以在着色器中使用 Vector 属性,创建自定义属性,比方说,[ShowAsVector2] 并为其制作 MaterialPropertyDrawer,这只会显示两个输入字段,并将它们的值分配给向量的 xy 值。这将导致着色器属性写为:

[ShowAsVector2] _Position2D("位置", 矢量) = (0, 0, 0, 0)

关于unity3d - 将 float2/vector2 属性从着色器公开到 Unity Material 检查器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60899301/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com