目標:想要調整材質球的透明感或顏色,不僅如此,要做出逐漸透明的感覺。
工作細項:
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;
myTemp = myTemp.transform.GetChild(0).gameObject;
myTemp.GetComponent<MeshRenderer>().material = background;
//想辦法取得要修改的遊戲物件的材質球,然後把background這個材質球指定給它
}
}
}
}
StartCoroutine(myFade(i)); //要使用的時候,進行呼叫
網路上另有人在討論Unity裡面的時間控制,我希望在迴圈中,能先暫停住,抓取回控制權,
然後在迴圈裡面,修改完顏色與透明感,然後再指定回去給要改變的遊戲物件,
所以才使用IEnumerator撰寫這樣的動態變化。我相信一定還有更省資源的寫法。
有人說,這類似VB的Doevents功能。
這個就是用來透過互動式按鈕,修改服裝的花色與材質的寫法。[連結]
沒有留言:
張貼留言