在用Unity3D開(kāi)發(fā)游戲中间护,我們會(huì)經(jīng)常創(chuàng)建多個(gè)場(chǎng)景,但是在場(chǎng)景過(guò)度的時(shí)候挖诸,通常場(chǎng)景中的對(duì)象會(huì)被刪除汁尺。所以Unity3D給了我們一個(gè)不刪 除前一個(gè)場(chǎng)景中的某一個(gè)對(duì)象或者腳本的API,那就是“DontDestoryOnLoad(對(duì)象或者某個(gè)腳本)”多律。但是我們?cè)谟眠@個(gè)API的時(shí)候我們會(huì) 發(fā)現(xiàn)一個(gè)很奇怪的問(wèn)題就是:如果A里面放了個(gè)東西o痴突,當(dāng)?shù)綀?chǎng)景B的時(shí)候搂蜓,o 也會(huì)出現(xiàn)在B場(chǎng)景中,這里一看辽装,感覺(jué)還是對(duì)的帮碰,然后你再返回到場(chǎng)景A, 你就會(huì)驚訝的發(fā)現(xiàn),A里面出現(xiàn)了兩個(gè)o,然后你到B, 看到B里面也出現(xiàn)了兩個(gè) o, 再回到A, A里面出現(xiàn)了3個(gè)o, 一直遞增上去拾积。
解決辦法:就是把要 DontDestroyOnLoad的對(duì)象做成一個(gè)預(yù)制體殉挽,然后專(zhuān)門(mén)用一個(gè)static bool變量來(lái)記錄這個(gè)對(duì)象是否被clone(克隆)拓巧,當(dāng)?shù)谝淮伪豢寺〉臅r(shí)候我們就把這個(gè)布爾變量變成真斯碌,只有在這個(gè)布爾變量是假的情況下才克隆這個(gè)預(yù)制 體。那么這個(gè)問(wèn)題就解決了肛度。
public static bool isClone;
public GameObject obj;
private GameObject cloneObj;
void Awake()
{
if(!isClone)
{
cloneObj =Instantiate(obj,obj.transform.position,obj.transform.rotation)as GameObject;
isClone = true;
}
DontDestoryOnLoad(cloneObj);
}