1)如何減緩邊玩邊下導(dǎo)致的發(fā)熱問(wèn)題
2)如何選擇網(wǎng)絡(luò)框架
3)關(guān)于函數(shù)參數(shù)使用Lambda表達(dá)式的疑問(wèn)
4)Unity 5.6升級(jí)2018.4利耍,播放特效閃退
這是第297篇UWA技術(shù)知識(shí)分享的推送。今天我們繼續(xù)為大家精選了若干和開(kāi)發(fā)、優(yōu)化相關(guān)的問(wèn)題,建議閱讀時(shí)間10分鐘目木,認(rèn)真讀完必有收獲子寓。
UWA 問(wèn)答社區(qū):answer.uwa4d.com
UWA QQ群2:793972859(原群已滿員)
Network
Q:我們項(xiàng)目是實(shí)現(xiàn)邊玩邊下的功能,怎么去降低它的IO困乒?
現(xiàn)在的情況是進(jìn)入游戲前加載一部分,在進(jìn)入游戲后會(huì)邊玩邊下2~3GB的資源慌洪,發(fā)熱比較嚴(yán)重顶燕,不知道大家怎么處理的凑保,有沒(méi)有限幀這類(lèi)的操作優(yōu)化帶寬的壓力。
A1:這個(gè)需要自己做個(gè)策略動(dòng)態(tài)調(diào)整涌攻,比如當(dāng)游戲處于戰(zhàn)斗等本身消耗比較大的場(chǎng)景時(shí)可以停止下載工作欧引,等退出這種特定場(chǎng)景,游戲比較閑置(如只在進(jìn)行一些簡(jiǎn)單的UI操作)時(shí)再重新開(kāi)始下載恳谎。同時(shí)可以隨時(shí)調(diào)整下載開(kāi)啟的線程數(shù)芝此,控制下載的負(fù)載,從而維護(hù)游戲中整體的性能平衡因痛。
感謝劉明@UWA問(wèn)答社區(qū)提供了回答
A2:可以參考UWA學(xué)堂上的文章婚苹,可以控制下載速度以及下載時(shí)CPU和內(nèi)存占用:《手游HTTP多線程下載原理與優(yōu)化》
感謝Xuan@UWA問(wèn)答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/62691381eee1190884986a99
Network
Q:最近要立新項(xiàng)目鸵膏,在網(wǎng)絡(luò)框架上有選擇困難癥膊升,項(xiàng)目需求:聯(lián)機(jī)多人割草游戲,需要支持多人游戲谭企,10人以內(nèi)廓译,400左右的怪物同步,上Steam债查。
狀態(tài)同步方案:
1. Mirror免費(fèi)非区,可以利用Steam的P2P網(wǎng)絡(luò),不支持主機(jī)遷移盹廷,主機(jī)掉了就沒(méi)了征绸;
2. Photon與Mirror類(lèi)似,收費(fèi)俄占,不能用Steam網(wǎng)絡(luò)管怠;
3. Netcode for GameObjects,Unity官方缸榄,預(yù)覽版排惨,可以用Steam網(wǎng)絡(luò),不知道支不支持主機(jī)遷移碰凶。
狀態(tài)同步方案開(kāi)發(fā)比較簡(jiǎn)單,但是比較擔(dān)心能不能同步這么多的怪物鹿驼。
幀同步方案:
1. Photon Quantum欲低,提供了確定性方案,無(wú)需開(kāi)發(fā)畜晰;收費(fèi)貴砾莱,不提供源碼;
2. LockstepEngine凄鼻,看介紹比較完善腊瑟,但是看評(píng)論說(shuō)有bug聚假。
上面這些方案都是我看文檔和介紹總結(jié)的,沒(méi)有實(shí)際使用過(guò)闰非,麻煩有經(jīng)驗(yàn)的大佬介紹下哪個(gè)最適合膘格,或者有什么其他更好的方案嗎?
A:對(duì)于Steam的商業(yè)游戲:
Mirror太吃Master的機(jī)器了财松,對(duì)Master不友好瘪贱,其他玩家也比較看Master的網(wǎng)絡(luò)也不友好。
同上辆毡。
Netcode目前處于1.0.0-preview7的版本菜秦,大約一個(gè)月左右更新一個(gè)小版本,個(gè)人感覺(jué)不是特別穩(wěn)定舶掖,不建議直接用球昨。
Photon Quantum好像是每人每月0.5美元,巨貴眨攘,直接不考慮主慰。
LockstepEngine相對(duì)上面4個(gè)來(lái)說(shuō)應(yīng)該稍微可以接受一點(diǎn),大師漁夫哥好久沒(méi)有維護(hù)了期犬。
推薦一手ET框架河哑。
對(duì)于10個(gè)人+400怪物來(lái)說(shuō),常規(guī)的方案可能都不太行龟虎,需要自己實(shí)現(xiàn)一套類(lèi)似狀態(tài)幀的東西璃谨。
感謝蕭小俊@UWA問(wèn)答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/6278e79bb87a45735152e71a
Scripting
Q:關(guān)于函數(shù)參數(shù)使用Lambda表達(dá)式的疑問(wèn):
寫(xiě)法一:_socket.BeginSend(data, offset, len, SocketFlags.None, out _socketError, new AsyncCallback(OnSendData), _socket);
寫(xiě)法二:_socket.BeginSend(data, offset, len, SocketFlags.None, out _socketError, OnSendData, _socket);
請(qǐng)問(wèn)寫(xiě)法二本質(zhì)同第一種是一樣的鲤妥?編譯器會(huì)幫忙new一個(gè)AsyncCallback佳吞?或者OnSendData指向的是函數(shù)的地址,沒(méi)有new的開(kāi)銷(xiāo)棉安?
A:我構(gòu)筑了兩個(gè)類(lèi)似的方法(省略了前后實(shí)現(xiàn))以驗(yàn)證兩種寫(xiě)法是否有差別底扳。
編譯后,使用dnSpy工具查看dll文件贡耽,發(fā)現(xiàn)IL代碼中都會(huì)有new的開(kāi)銷(xiāo)衷模,即兩種寫(xiě)法本質(zhì)上是完全一致的。
感謝Faust@UWA問(wèn)答社區(qū)提供了回答蒲赂,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/627c7fcbb87a45735155df60
ParticleSystem
Q:Unity 5.6升級(jí)2018.4阱冶,播放特效閃退。
特效重新激活LimitVelocityoverLifetime播放正常滥嘴。發(fā)現(xiàn)Prefab的差異僅在ClampVelocityModule的模塊木蹬。其中y和z的minMaxState好的是1,播放閃退的是0若皱。將0改成1特效播放正常镊叁。
AssetDatabase.ForceReserializeAssets默認(rèn)的minMaxState是0尘颓,所以我想這是該方法無(wú)效的原因之一。后面發(fā)現(xiàn)如果x是1晦譬,則y疤苹、z必須是1。如果x是0蛔添,則y痰催、z隨便。因?yàn)殚W退特效現(xiàn)在不多迎瞧,現(xiàn)在項(xiàng)目的處理方式是對(duì)資源進(jìn)行自檢夸溶,再確定解決方案。
經(jīng)過(guò)各種測(cè)試凶硅,也確定了是因?yàn)檫@個(gè)原因?qū)е路觳谩z測(cè)出來(lái)的其他特效也會(huì)閃退,但不知道為何ClampVelocityModule的minMaxState的x為何會(huì)影響足绅,需要借助源碼查看原因了捷绑。請(qǐng)問(wèn)大家有源碼可以提供么?
A:從源碼上看氢妈,minMaxState的x粹污、y、z需要做到State同步首量。
可以根據(jù)自己的Unity版本壮吩,到官方的Git下載:https://github.com/Unity-Technologies/UnityCsReference
感謝廖武興@UWA問(wèn)答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/6279cb10b87a457351539421
封面圖來(lái)源于網(wǎng)絡(luò)
今天的分享就到這里加缘。當(dāng)然鸭叙,生有涯而知無(wú)涯。在漫漫的開(kāi)發(fā)周期中拣宏,您看到的這些問(wèn)題也許都只是冰山一角沈贝,我們?cè)缫言赨WA問(wèn)答網(wǎng)站上準(zhǔn)備了更多的技術(shù)話題等你一起來(lái)探索和分享。歡迎熱愛(ài)進(jìn)步的你加入勋乾,也許你的方法恰能解別人的燃眉之急宋下;而他山之“石”,也能攻你之“玉”辑莫。
官網(wǎng):www.uwa4d.com
官方技術(shù)博客:blog.uwa4d.com
官方問(wèn)答社區(qū):answer.uwa4d.com
UWA學(xué)堂:edu.uwa4d.com
官方技術(shù)QQ群:793972859(原群已滿員)