gpt4 book ai didi

c# - 在 Unity 着色器中避免字符串属性

转载 作者:行者123 更新时间:2023-12-02 19:08:11 26 4
gpt4 key购买 nike

在 Unity 中创建着色器时,您可以向其添加一个可以从不同脚本内部调用的属性。为此,可以使用以下行调用并设置 Vector3 属性名称 _vector3:

materialName.SetVector("_vector3", new Vector3(1, 1, 1));

这很好,但是真的没有办法避免使用“魔法”字符串吗?看起来这是一种非常困惑且容易出错的方法。我知道也许您可以在顶部定义它,这样它就不是一个“神奇”的字符串,但它仍然是一个字符串变量,在进行任何更改时需要从着色器传递到脚本。

这里有一个非常基本的问题:在 Unity 中调用变量时有没有办法避免使用“魔术”字符串?

最佳答案

不,没有办法摆脱字符串标识符。当然,您可以在一个地方添加一些包含着色器属性标识符的帮助程序类,以提高可维护性。

public static class ShaderProps
{
public static class MyShaderA
{
public const string SomeProperty = "_vector3";
}
}

// Usage
public class MyBehaviour : MonoBehaviour
{
private void Update
{
material.SetVector(ShaderProps.MyShaderA.SomeProperty, ...);
}
}

您应该使用 Shader.PropertyToID(string name) 并缓存结果,因为它更有效。每次您使用字符串标识符时,Unity 都会在后台调用它,从而使重复调用字符串(例如在 Update 中)变得不利。

关于c# - 在 Unity 着色器中避免字符串属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64745639/

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