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