自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Unity3D無縫地形場景切換的解決方法

開發(fā) 游戲開發(fā)
當(dāng)我們開發(fā)一個大型項目的時候-會遇到這樣的問題(地形場景的切換)這個只是字面意思-并不是重場景1的100 100 100坐標(biāo)一下切換到場景2的100 100 100坐標(biāo)這樣的方法。

(如果您以為是這樣的技術(shù)和代碼)那就不用看了。這個技術(shù)的實質(zhì)意義是為了解決--多地形場景帶來的大量內(nèi)存占用問題-舉個我的例子-我的測試項目是1013張繪制地形--在不用上面的技術(shù)情況下-占用了我4.2G的內(nèi)存(還好我電腦16G)想想下-如果一個大型的游戲直接這么運行的話(當(dāng)然是不可能會這樣傻的)一下就會帶來5-8G的內(nèi)存占用--這個游戲還能玩嗎?(當(dāng)然這個8G的占用內(nèi)存也沒換來他應(yīng)該的效果,所以是浪費)

涉及到幾個U3D函數(shù):

Application.LoadLevel(lv):場景讀取(記著用多場景前要現(xiàn)在File-Build Setting里登記下場景,才能在腳本里讀取到)

DontDestroyOnLoad(object):保持物體在場景切換的時候不被卸載(能保持他的所有屬性哦)

*AssetBundle類:預(yù)讀資源(主要用于web3d,運行時實時從服務(wù)器下載需要的場景資源)

涉及到幾個基礎(chǔ)知識:

static 靜態(tài)類、靜態(tài)變量:在整個游戲中都不會被重新加載,所以可以當(dāng)全局全場景變量使用,主要用于記錄場景數(shù)組。

Collider的Is Trigger屬性:設(shè)置成True,他是可以穿越不會產(chǎn)生能量傳遞的,但是,他是可以接受碰撞偵測的。配合主角的OnTriggerEnter事件,就可以知道你是否正在穿越一個Trigger了。在這里,我們用在判斷何時加載新場景上。

2.制作場景邊界

使用Cube + IsTrigger=True屬性是***的辦法。

如果是雙場景切換,注意兩個場景邊界坐標(biāo)別重在一起,不然你走到邊界會發(fā)現(xiàn)兩個邊界不停的切換=.=,要讓2個場景邊界互相交錯一起。有必要的話,邊界可以往里面縮一點(甚至可以吧場景重疊1/3,但這樣兩個場景你要做很多重復(fù)的東西),避免用戶看到邊界。

3.編寫腳本

先理清楚邏輯關(guān)系以及一些常識:

1.是主攝像機走到邊界才會做場景加載或卸載動作。所以代碼是放在主攝像機上或者主角上。

2.場景可以加載,但是沒有卸載場景這個東西(也沒必要卸載,因為同一時間只會有一個場景為當(dāng)前場景),所以如果你用九宮格方式做無縫連接,你需要把場景讀取,然后讓場景里所有物體DontDestroyOnLoad(當(dāng)然包括主角,也就是this),然后其他場景也這么操作,當(dāng)需要卸載場景時,只要把所有那個場景Object給Destroy掉就可以了。而做雙場景連接則不需要這樣,也簡單的多。Unity3D教程手冊:www.unitymanual.com

3.如果是九宮格,你需要一個靜態(tài)二維數(shù)組去記錄每個位置場景的名字。這里也可以不需要這么做,有個技巧,你可以格式化場景名字規(guī)則來推算下一個需要加載的場景名字,比如M1N1表示(1,1)場景,那你就可以用字符串拆分的方法知道需要讀取M0N0,M1N0,M2N0等等的場景。

4.接下來就是處理碰撞,獲取下一個場景(雙場景方式)或者當(dāng)前場景(九宮格方式)的名字,這里你就可以看到一個被格式化過的場景名有多么重要。

 

 

  

 

1

function OnTriggerEnter(other:Collider){

2

 

3

  Application.LoadLevel(other.name);  //這是雙場景方式直接把邊界Cube名字設(shè)為了下一個場景名

4

 

5

  }

 

上面的介紹是大概的描述-具體實現(xiàn)方法如下

我們在使用這個技術(shù)之前要將你的地形--在U3D里的File-Build Setting里登記下場景,才能在腳本里讀取到-Add Current(這個是登記地形),之后我們來制作一個簡單的-2個地形的切換方法。

如圖:

Unity3D教程:無縫地形場景切換的解決方法

Unity3D教程:無縫地形場景切換的解決方法

這個圖是做好了的2張地形--中間的Cube是用來接受角色的碰撞的--這樣我們就知道在何時去載入我們的下張地形場景了(不包括其他-數(shù)據(jù),列如--坐騎這類的-這個需要另一段代碼單獨給坐騎-馬或者車子這類的--還有很多)

Cube---把Inspector--Is Trigger--劃勾--(這個作用是接受碰撞但不產(chǎn)生能量傳遞-也就是說他接受碰撞,但可以讓同樣具有 Is Trigger-劃勾的屬性物體通過--列入-我們的角色或坐騎)(補充--我們的角色也需要去勾選-Is Trigger-這些才可以通過,但官方自帶的FPS--沒有Is Trigger-這個勾選像-可以用如下方法解決-創(chuàng)建一個新的Cube為他重新命名-把他作為FPS-父物體--然后勾選-Cube的 Is Trigger-子物體就會有這項屬性了)Unity3D教程手冊:www.unitymanual.com

這些工作建立好了以后-開始我們的腳本工作。

腳本如下:

 

 

  

 

01

  function OnTriggerEnter(other:Collider)

02

 

03

  {

04

 

05

  if (other.gameObject.name==“Cube1”)

06

 

07

  Application.LoadLevel(“Terrain 1”);

08

 

09

  };

10

 


為了方便大家理解--我沒有重新命名--Cube1--就是我們接受碰撞體,Terrain 1是我們的要載入的下張地形。(大家可以用很多方法去優(yōu)化他--有優(yōu)化的方法請發(fā)在這個帖子內(nèi)-方便大家查看-非常感謝)

 

這段代碼要放在角色上或角色攝像機上或FPS的父物體Cube上。

以上的操作就完成了-一個重地形0到地形1的切換--(可以解決100M或跟高的內(nèi)存占用問題-這個要看你的地形場景而定了)

但這并不完整--我們也可能要重地形1回到地形0---這個要你們自己解決了-以上的內(nèi)容已經(jīng)把這個解決的方法說出來了--大家自己學(xué)習(xí)發(fā)揮下--這樣才有進(jìn)步。

下面我們來說明4張地形場景的載入--邏輯(這里只說明邏輯,具體代碼和上方一樣,需要大家自己發(fā)揮下)

如圖 :

Unity3D教程:無縫地形場景切換的解決方法

Unity3D教程:無縫地形場景切換的解決方法

這個圖中可以看到4張地形場景--我重點講解--中間的2個大的Cube邏輯--那4個長方形的大家應(yīng)該都清楚了。除非你沒認(rèn)真看。

中間***的Cube是來判斷--角色走的這個范圍內(nèi)的時候他要去載入那張地形場景-如果在這個大的Cube的范圍內(nèi)折載入其他的2張地形場景。(這個大的Cube可以根據(jù)自己的地形規(guī)格-做出調(diào)整這里給出的并不準(zhǔn)確)

中間最小的Cube是來判斷--角色走的這個范圍內(nèi)的時候他要去載入那張地形場景-如果角色走入小的Cube中后-載入其他3地形。

上面的方法只是--引導(dǎo)--實際制作中可以跟據(jù)這些方法推敲-這個4張地形場景同樣少了-往返的-制作介紹--給大家學(xué)習(xí)的空間去發(fā)揮吧。

原文鏈接:http://www.unitymanual.com/6718.html

【編輯推薦】

責(zé)任編輯:彭凡 來源: Unity教程手冊
相關(guān)推薦

2013-04-25 09:08:39

unity3D手機游戲引擎

2013-04-25 09:56:24

unity3D手機游戲引擎

2013-04-25 09:47:54

unity3D手機游戲引擎

2012-12-24 08:48:25

iOSUnity3D

2012-12-24 08:50:21

iOSUnity3D

2013-04-25 10:03:07

unity3D手機游戲引擎

2013-04-25 13:27:11

unity3D手機游戲引擎

2013-06-19 08:52:48

Unity3D

2012-12-24 09:02:48

iOSUnity3D

2013-04-09 13:42:23

Unity3D基礎(chǔ)知識梳理

2012-06-16 16:57:52

WebGL

2013-06-18 08:49:15

2012-12-24 08:46:50

iOSUnity3D

2012-12-24 09:11:58

iOSUnity3D

2012-12-24 09:20:48

AndoidUnity3D

2013-06-14 09:54:04

Unity3D

2012-12-24 08:45:19

iOSUnity3D

2015-01-06 09:55:16

Unity3D實時繪制

2013-04-25 10:40:32

unity3D手機游戲引擎

2013-06-24 08:48:55

Unity3D
點贊
收藏

51CTO技術(shù)棧公眾號