網頁

2020年11月10日 星期二

[Unity] 材質的語法控制-調整顏色與透明感

目標:想要調整材質球的透明感或顏色,不僅如此,要做出逐漸透明的感覺。
工作細項:
1. 逐漸透明是一種動態變化,所以必須可以控制時間,我選用IEnumerator 作時間控制
2. 調整的是材質球裡面的color參數,通常包含rgba,也就是red, green, blue, alpha
3. 必須可以抓到材質球,修改後,再指定回去給要改變的遊戲物件
4. 因為我的遊戲物件的結構parent-child結構很龐大,所以要指定是第幾個child修改透明感

以下稍微解釋一下程式碼的意義:

IEnumerator myFade(int theNumber)  // theNumber用來指定要改變顏色的是第幾個child
{
background = Resources.Load("black", typeof(Material)) as Material;  
                           //先自行生成一個材質球,放在自行生成的Resources資料夾
                           // 把這個材質球命名為background

for (int i = 0; i < 11; i++)
{
    yield return new WaitForSeconds(0.1f);
    color = new Color(0.8f, 0.8f, 0.8f, 1-i*0.1f);  //修改顏色參數的時候,使用new,然後指定給color
    background.color = color;                               //把color指定給background材質球

    myTemp = brain.transform.GetChild(theNumber).gameObject;  //取得要此遊戲物件的第幾個child
    myTemp = myTemp.transform.GetChild(0).gameObject;  
    myTemp.GetComponent<MeshRenderer>().material = background; 
                       //想辦法取得要修改的遊戲物件的材質球,然後把background這個材質球指定給它
}
}

StartCoroutine(myFade(i));    //要使用的時候,進行呼叫


網路上另有人在討論Unity裡面的時間控制,我希望在迴圈中,能先暫停住,抓取回控制權,
然後在迴圈裡面,修改完顏色與透明感,然後再指定回去給要改變的遊戲物件,
所以才使用IEnumerator撰寫這樣的動態變化。我相信一定還有更省資源的寫法。
有人說,這類似VB的Doevents功能。

這個就是用來透過互動式按鈕,修改服裝的花色與材質的寫法。[連結]


沒有留言:

張貼留言