青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

麒麟子

~~

導航

<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

統計

常用鏈接

留言簿(12)

隨筆分類

隨筆檔案

Friends

WebSites

積分與排名

最新隨筆

最新評論

閱讀排行榜

評論排行榜

Unity3d之無縫地形場景切換–解決方法和代碼

當我們開發一個大型項目的時候-會遇到這樣的問題(地形場景的切換)這個只是字面意思-并不是重場景1的100 100 100坐標一下切換到場景2的100 100 100坐標這樣的方法--(如果您以為是這樣的技術和代碼)那就不用看了。這個技術的實質意義是為了解決--多地形場景帶來的大量內存占用問題-舉個我的例子-我的測試項目是1013張繪制地形--在不用上面的技術情況下-占用了我4.2G的內存。想想下-如果一個大型的游戲直接這么運行的話)一下就會帶來5-8G的內存占用--這個游戲還能玩嗎?

下面讓我們來研究實現的方法和代碼

涉及到幾個U3D函數:(引用高人的文檔介紹)

Application.LoadLevel(lv)   場景讀取(記著用多場景前要現在File-Build Setting里登記下場景,才能在腳本里讀取到) DontDestroyOnLoad(object)  保持物體在場景切換的時候不被卸載(能保持他的所有屬性哦)

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

涉及到幾個基礎知識:

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

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

2.制作場景邊界

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

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

3.編寫腳本

好了,現在可以開始寫腳本了,我一如既往的很懶,所以不會吧全部代碼粘帖出來 。(我會別看到這里不看了,這是以前高人寫的)

先理清楚邏輯關系以及一些常識:

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

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

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

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

function OnTriggerEnter(other:Collider){

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

}

上面的介紹是大概的描述-具體實現方法如下

我們在使用這個技術之前要將你的地形--在U3D里的File-Build Setting里登記下場景,才能在腳本里讀取到-Add Current(這個是登記地形)

之后我們來制作一個簡單的-2個地形的切換方法

如圖:

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

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

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

腳本如下:

function OnTriggerEnter(other:Collider)

{

if (other.gameObject.name=="Cube1")

Application.LoadLevel("Terrain 1");

};

復制代碼

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

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

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

但這并不完整--我們也可能要重地形1回到地形0---這個要你們自己解決了-以上的內容已經把這個解決的方法說出來了--大家自己學習發揮下--這樣才有進步。

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

如圖

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

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

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

原文鏈接:http://keigoliye.blog.163.com/blog/static/146213359201081923658957/

posted on 2013-02-22 22:52 麒麟子 閱讀(3190) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久国产精品久久久久久| 欧美成人精品一区| 亚洲美女诱惑| 亚洲视频一起| aa成人免费视频| 中文在线不卡| 亚洲自拍偷拍麻豆| 午夜一级久久| 久久深夜福利免费观看| 免费黄网站欧美| 亚洲国产综合在线| 亚洲大胆人体视频| 日韩午夜三级在线| 午夜精品福利在线| 久久综合久久久| 欧美日韩精品欧美日韩精品一| 国产精品大全| 在线观看不卡av| 亚洲视频精选在线| 麻豆九一精品爱看视频在线观看免费| 亚洲国产色一区| 欧美一区二区三区喷汁尤物| 免费观看在线综合| 国产精品试看| 亚洲精品一区二区三区不| 午夜激情亚洲| 欧美激情一区二区三区在线| 99精品国产热久久91蜜凸| 欧美一区二区在线看| 欧美黑人在线观看| 国产亚洲欧洲一区高清在线观看| 91久久久久久| 久久人人97超碰人人澡爱香蕉| 亚洲精品久久| 久久精品日韩| 国产麻豆91精品| 亚洲伦理在线免费看| 欧美呦呦网站| 亚洲精品系列| 牛人盗摄一区二区三区视频| 国产亚洲精品久| 欧美一级在线视频| 99热在线精品观看| 欧美欧美在线| 最新日韩中文字幕| 裸体一区二区三区| 欧美中在线观看| 国产欧美精品va在线观看| 中文在线一区| 亚洲免费激情| 欧美人成网站| 亚洲深夜av| 亚洲欧洲在线视频| 欧美成人免费播放| 亚洲破处大片| 欧美激情一区| 欧美xart系列在线观看| 影音先锋在线一区| 久久综合久久综合久久综合| 欧美中文字幕在线播放| 国内久久精品| 久久精品成人| 欧美在线观看一区二区| 国产日韩欧美高清| 久久精品一区二区三区四区 | 99视频热这里只有精品免费| 老司机午夜精品视频| 久久se精品一区二区| 国产欧美一区视频| 久久精品欧美日韩精品| 欧美一级视频免费在线观看| 国产欧美激情| 男人插女人欧美| 欧美国产欧美亚洲国产日韩mv天天看完整 | 久久久噜噜噜久久中文字幕色伊伊| 亚洲一级二级在线| 国产亚洲欧洲| 欧美高清视频一区| 欧美日韩成人综合天天影院| 亚洲视频免费看| 午夜精品一区二区在线观看| 国产一级一区二区| 欧美大片一区| 欧美日韩中文字幕精品| 性久久久久久久久久久久| 欧美一区二区三区成人| 亚洲国产一区二区三区a毛片| 亚洲国产欧美精品| 国产精品九九| 久久综合狠狠综合久久综合88| 免费看av成人| 午夜精品一区二区三区电影天堂 | 91久久国产自产拍夜夜嗨| 欧美乱妇高清无乱码| 欧美一区二区三区男人的天堂 | 国产人成精品一区二区三| 久久久综合精品| 欧美精品黄色| 久久久久www| 欧美日韩国语| 蜜臀久久久99精品久久久久久| 欧美日本精品| 免费精品99久久国产综合精品| 欧美日韩国产色综合一二三四 | 国产精品激情电影| 国产精品久久久久免费a∨大胸| 久久精品91久久香蕉加勒比 | 国产精品网站在线观看| 久久综合九色综合网站| 欧美午夜精品久久久| 免费毛片一区二区三区久久久| 欧美日韩日韩| 欧美激情中文字幕一区二区| 国产精品视频精品| 亚洲精品中文字幕在线| 精品成人国产在线观看男人呻吟| 艳女tv在线观看国产一区| 亚洲国产精品电影| 欧美在线亚洲综合一区| 午夜激情一区| 国产精品久久久久久av下载红粉 | 国产精品永久免费观看| 亚洲第一在线综合在线| 黄色成人av在线| 午夜视频一区在线观看| 亚洲欧美国产精品va在线观看| 欧美精品1区2区3区| 欧美成人一区在线| 很黄很黄激情成人| 欧美专区日韩专区| 久久av一区二区三区| 国产精品夫妻自拍| 亚洲视频 欧洲视频| 在线中文字幕一区| 欧美日韩一区二区三区在线观看免| 免费在线观看日韩欧美| 狠狠色2019综合网| 久久久久久国产精品一区| 久久久人成影片一区二区三区| 国产香蕉97碰碰久久人人| 欧美一区二区三区视频免费| 翔田千里一区二区| 国产一区观看| 久久久久青草大香线综合精品| 久久视频这里只有精品| 韩国三级电影久久久久久| 久久男人av资源网站| 欧美成人国产| 亚洲美洲欧洲综合国产一区| 欧美精品午夜视频| 一本大道久久精品懂色aⅴ| 亚洲无玛一区| 国产精品在线看| 久久久久久尹人网香蕉| 欧美大成色www永久网站婷| 日韩午夜电影| 国产精品家庭影院| 香蕉乱码成人久久天堂爱免费| 久久人体大胆视频| 亚洲精品美女91| 国产精品大全| 久久久亚洲国产美女国产盗摄| 亚洲国产精品日韩| 亚洲女同在线| 揄拍成人国产精品视频| 欧美另类一区| 久久福利资源站| 亚洲国产一区在线观看| 亚洲人成高清| 亚洲高清激情| 亚洲欧美在线aaa| 亚洲一区在线直播| 国产美女一区| 免费成人高清| 中文久久精品| 美女免费视频一区| 夜夜嗨av色综合久久久综合网| 国产精品视频午夜| 欧美国产丝袜视频| 欧美一区二区| 日韩一级精品| 欧美大尺度在线| 久久九九电影| 99国产精品久久久| 久久人人97超碰精品888| 一区二区三区高清在线| 韩国一区二区在线观看| 欧美日韩在线不卡一区| 欧美中文日韩| 99日韩精品| 欧美黄色aa电影| 久久久久久久久综合| 亚洲图片在线观看| 亚洲精品永久免费| 精品成人a区在线观看| 国产精品一区免费观看| 欧美片在线播放| 欧美高清在线| 老司机午夜精品| 欧美在线观看网站|