【发布时间】:2020-11-09 03:50:59
【问题描述】:
在 Unity 中创建着色器时,您可以向其添加一个可以从不同脚本内部调用的属性。为此,可以使用以下行调用并设置 Vector3 属性名称_vector3:
materialName.SetVector("_vector3", new Vector3(1, 1, 1));
这很好,但真的没有办法避免使用“魔法”字符串吗?似乎是一种非常混乱且容易出错的方法。我知道也许你可以在顶部定义它,这样它就不是一个“神奇”的字符串,但它仍然是一个字符串变量,在进行任何更改时需要从着色器传递到脚本。
这里有一个非常基本的问题:有没有办法在 Unity 中调用变量时避免使用“魔法”字符串?
【问题讨论】:
-
似乎有一个重载需要一个 ID:docs.unity3d.com/ScriptReference/Material.SetVector.html 您仍然需要将一个字符串传递给
Shader.PropertyToID以将名称解析为 id,但只需一次,看起来这是首选方法,根据文档。 ID可以保存到变量中,如vector3_id等 -
@CoolBots 很确定这只是为了优化目的。根据我发现的所有内容,您可以在脚本顶部使用它来避免多次发生转换。不过,您仍然需要为初始转换提供字符串名称。所以它并不能真正帮助解决我对字符串的抱怨,还是我错过了什么?
-
@Jee 不,这是为了优化目的,你是对的 ^^
-
没有办法避免这些神奇的字符串,但是你可以将它们定义为 const,这样它们就不会是神奇的了 ^^
标签: c# unity3d graphics shader