我在Unity中有一個關於gameObject的着色器,我們稱它爲FooShader。在FooShader中有一個名爲_fooVal
的公共財產,我想實時更新。動態改變着色器的屬性
我在同一個gameObject上創建了一個空白的C#腳本。 我的第一個問題是我該如何參考這個着色器FooShader
?然後我有一個正確的參考改變其_fooVal
財產?
我試過使用以下來獲取對着色器的引用,但它不起作用。
gameObject.material._fooVal
我在Unity中有一個關於gameObject的着色器,我們稱它爲FooShader。在FooShader中有一個名爲_fooVal
的公共財產,我想實時更新。動態改變着色器的屬性
我在同一個gameObject上創建了一個空白的C#腳本。 我的第一個問題是我該如何參考這個着色器FooShader
?然後我有一個正確的參考改變其_fooVal
財產?
我試過使用以下來獲取對着色器的引用,但它不起作用。
gameObject.material._fooVal
如果我正確理解你的問題,你不能直接訪問着色器中的變量,你必須使用材質對象上的方法。試試下面的代碼,讓您的渲染器組件和設置的值(例如)在其着色浮法:
Renderer rend = GetComponent<Renderer>();
rend.material.SetFloat("_fooVal", 2.0f /* Your value here */);
這裏是Unity3D reference on materials - 也有SetInt
,SetColor
,SetVector
和其他取決於方法你正試圖更新什麼類型的變量。
謝謝,巨大的幫助 –
Unity包含ShaderUtil來遍歷着色器參數(請參閱https://docs.unity3d.com/ScriptReference/ShaderUtil.html中的Unity文檔)。通過了解參數,您可以使用SetFloat,SetColor等來設置它們。 –