2015-08-13 135 views
2

我在Unity中有一個關於gameObject的着色器,我們稱它爲FooShader。在FooShader中有一個名爲_fooVal的公共財產,我想實時更新。動態改變着色器的屬性

我在同一個gameObject上創建了一個空白的C#腳本。 我的第一個問題是我該如何參考這個着色器FooShader?然後我有一個正確的參考改變其_fooVal財產?

我試過使用以下來獲取對着色器的引用,但它不起作用。

gameObject.material._fooVal 
+0

Unity包含ShaderUtil來遍歷着色器參數(請參閱https://docs.unity3d.com/ScriptReference/ShaderUtil.html中的Unity文檔)。通過了解參數,您可以使用SetFloat,SetColor等來設置它們。 –

回答

4

如果我正確理解你的問題,你不能直接訪問着色器中的變量,你必須使用材質對象上的方法。試試下面的代碼,讓您的渲染器組件和設置的值(例如)在其着色浮法:

Renderer rend = GetComponent<Renderer>(); 
rend.material.SetFloat("_fooVal", 2.0f /* Your value here */); 

這裏是Unity3D reference on materials - 也有SetIntSetColorSetVector和其他取決於方法你正試圖更新什麼類型的變量。

+0

謝謝,巨大的幫助 –