unity节目素材ProceduralMaterial采用
有些效果substance物質的。然而,對房地產的材料可以不尋常Material方法調用,必須ProceduralMaterial打電話。
using UnityEngine; using System.Collections;public class TestProceduralMaterial : MonoBehaviour {public GameObject TestCube;public Texture2D tex;public ProceduralMaterial materialItem;void Start () {ProceduralMaterial substance = Object.Instantiate(materialItem) as ProceduralMaterial;//載入一個程序材質TestCube.renderer.sharedMaterial = substance;TestCube.renderer.sharedMaterial.SetTextureScale("_MainTex" , new Vector2(3,3));//改變uv,這是正常材質的方法ProceduralPropertyDescription[] inputs = substance.GetProceduralPropertyDescriptions();foreach(ProceduralPropertyDescription input in inputs)//獲得程序材質的屬性,有的屬性不知道是什么名字的時候能夠用這個獲得全部屬性名字和類型{Debug.Log("input type = "+input.type +" input name = "+input.name);}substance.SetProceduralBoolean("Battens",true);//設置boolsubstance.SetProceduralFloat("Battens_Amount_X",6f);//設置floatsubstance.SetProceduralColor("Wood_Color",new Color(0.8f,0.5f,0.2f));//設置顏色substance.SetProceduralTexture("Input",tex);//設置貼圖substance.RebuildTextures();//這句話是必須的應用全部改動。}// Update is called once per framevoid Update () {} }當然還有SetProceduralEnum,SetProceduralVector。等設置屬性。依據須要設置。
我在載入的時候會出現這個問題
無效的程序材質。可是值都已經改動。圖也賦上去了,(2014-07-23加入備注。經過測試。這樣克隆出一個材質假設改動是不能夠使用的。由于這樣本身載入錯了。改動值的時候也有問題了,僅僅能一個程序材質僅僅能針對一種使用,我研究了下沒有好的new出一個新的程序材質的方法,大家有知道的方便告訴下。
)。不知為什么,在ProceduralMaterial和renderer.material的屬性也就是正常材質一起改動值的時候會出現這樣的情況,
我是為了同一個材質在不同的物體上有不同的參數。才去這樣設置Object.Instantiate(materialItem) as ProceduralMaterial;//載入一個程序材質,這樣保證不改動主材質球的屬性,能夠在不同物體上使用同一個substance通過調整值去實現不同的效果。假設我不使用這句話Object.Instantiate。去載入就沒事了。顯示正常。可是這樣僅僅能一個材質球相應一個物體。其它的物體再次這樣使用這個材質球的時候。改動參數的時候改動的是主材質球,這樣物體就全變了。變成你最后一次改動的參數效果。
這樣就會顯示出來,這個僅僅影響界面參數顯示,不影響實際效果,可是看著那個無效的程序材質invalid Procedural Material有些不爽,不知自己的值是否正確。是否自己想要的。我通過測試確實參數都對應的改動了,有哪位大俠知道請告知小弟。
最后說一下.renderer.sharedMaterial 和renderer.material的差別,我建議使用前者共享材質,可是他在本地開發的時候會出現故障。會影響根材質,這樣把自己project中的材質屬性就改動了,只是大家能夠使用平臺推斷,在本地project使用后者。公布各個平臺使用前者。由于后者每次調用都會new一個材質出來。太耗內存了。
using UnityEngine; using System.Collections;public class TestProceduralMaterial : MonoBehaviour {public GameObject TestCube;public Texture2D tex;public Material materialItem;void Start () {TestCube.renderer.sharedMaterial = materialItem;TestCube.renderer.sharedMaterial.mainTextureScale = new Vector2(3,3);//改變uv。這是正常材質的方法ProceduralMaterial substance = TestCube.renderer.sharedMaterial as ProceduralMaterial;//得到該物體的程序材質ProceduralPropertyDescription[] inputs = substance.GetProceduralPropertyDescriptions();foreach(ProceduralPropertyDescription input in inputs)//獲得程序材質的屬性,有的屬性不知道是什么名字的時候能夠用這個獲得全部屬性名字和類型{Debug.Log("input type = "+input.type +" input name = "+input.name);}substance.SetProceduralBoolean("Battens",true);//設置boolsubstance.SetProceduralFloat("Battens_Amount_X",6f);//設置floatsubstance.SetProceduralColor("Wood_Color",new Color(0.8f,0.5f,0.2f));//設置顏色substance.SetProceduralTexture("Input",tex);//設置貼圖substance.RebuildTextures();//這句話是必須的應用全部改動。}// Update is called once per framevoid Update () {} }
這種程序是沒有問題的,可是使用改動的都是根材質。這個方案是正確的。肯定沒錯
版權聲明:本文博主原創文章,博客,未經同意不得轉載。
總結
以上是生活随笔為你收集整理的unity节目素材ProceduralMaterial采用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows Moible, Winc
- 下一篇: krpano使用总结-地图路线