博客 / 詳情

返回

如何減緩邊玩邊下導致的發熱問題

1)如何減緩邊玩邊下導致的發熱問題
​2)如何選擇網絡框架
3)關於函數參數使用Lambda表達式的疑問
4)Unity 5.6升級2018.4,播放特效閃退


這是第297篇UWA技術知識分享的推送。今天我們繼續為大家精選了若干和開發、優化相關的問題,建議閲讀時間10分鐘,認真讀完必有收穫。

UWA 問答社區:answer.uwa4d.com
UWA QQ羣2:793972859(原羣已滿員)

Network

Q:我們項目是實現邊玩邊下的功能,怎麼去降低它的IO?

現在的情況是進入遊戲前加載一部分,在進入遊戲後會邊玩邊下2~3GB的資源,發熱比較嚴重,不知道大家怎麼處理的,有沒有限幀這類的操作優化帶寬的壓力。

A1:這個需要自己做個策略動態調整,比如當遊戲處於戰鬥等本身消耗比較大的場景時可以停止下載工作,等退出這種特定場景,遊戲比較閒置(如只在進行一些簡單的UI操作)時再重新開始下載。同時可以隨時調整下載開啓的線程數,控制下載的負載,從而維護遊戲中整體的性能平衡。

感謝劉明@UWA問答社區提供了回答

A2:可以參考UWA學堂上的文章,可以控制下載速度以及下載時CPU和內存佔用:《手遊HTTP多線程下載原理與優化》

感謝Xuan@UWA問答社區提供了回答

Network

Q:最近要立新項目,在網絡框架上有選擇困難症,項目需求:聯機多人割草遊戲,需要支持多人遊戲,10人以內,400左右的怪物同步,上Steam。

狀態同步方案:
1. Mirror免費,可以利用Steam的P2P網絡,不支持主機遷移,主機掉了就沒了;
2. Photon與Mirror類似,收費,不能用Steam網絡;
3. Netcode for GameObjects,Unity官方,預覽版,可以用Steam網絡,不知道支不支持主機遷移。

狀態同步方案開發比較簡單,但是比較擔心能不能同步這麼多的怪物。

幀同步方案:
1. Photon Quantum,提供了確定性方案,無需開發;收費貴,不提供源碼;
2. LockstepEngine,看介紹比較完善,但是看評論説有bug。

上面這些方案都是我看文檔和介紹總結的,沒有實際使用過,麻煩有經驗的大佬介紹下哪個最適合,或者有什麼其他更好的方案嗎?

A:對於Steam的商業遊戲:

  1. Mirror太吃Master的機器了,對Master不友好,其他玩家也比較看Master的網絡也不友好。
  2. 同上。
  3. Netcode目前處於1.0.0-preview7的版本,大約一個月左右更新一個小版本,個人感覺不是特別穩定,不建議直接用。
  4. Photon Quantum好像是每人每月0.5美元,巨貴,直接不考慮。
  5. LockstepEngine相對上面4個來説應該稍微可以接受一點,大師漁夫哥好久沒有維護了。
  6. 推薦一手ET框架。
  7. 對於10個人+400怪物來説,常規的方案可能都不太行,需要自己實現一套類似狀態幀的東西。

感謝蕭小俊@UWA問答社區提供了回答

Scripting

Q:關於函數參數使用Lambda表達式的疑問:

寫法一:_socket.BeginSend(data, offset, len, SocketFlags.None, out _socketError, new AsyncCallback(OnSendData), _socket);

寫法二:_socket.BeginSend(data, offset, len, SocketFlags.None, out _socketError, OnSendData, _socket);

請問寫法二本質同第一種是一樣的?編譯器會幫忙new一個AsyncCallback?或者OnSendData指向的是函數的地址,沒有new的開銷?

A:我構築了兩個類似的方法(省略了前後實現)以驗證兩種寫法是否有差別。

編譯後,使用dnSpy工具查看dll文件,發現IL代碼中都會有new的開銷,即兩種寫法本質上是完全一致的。

感謝Faust@UWA問答社區提供了回答

ParticleSystem

Q:Unity 5.6升級2018.4,播放特效閃退。

特效重新激活LimitVelocityoverLifetime播放正常。發現Prefab的差異僅在ClampVelocityModule的模塊。其中y和z的minMaxState好的是1,播放閃退的是0。將0改成1特效播放正常。

AssetDatabase.ForceReserializeAssets默認的minMaxState是0,所以我想這是該方法無效的原因之一。後面發現如果x是1,則y、z必須是1。如果x是0,則y、z隨便。因為閃退特效現在不多,現在項目的處理方式是對資源進行自檢,再確定解決方案。

經過各種測試,也確定了是因為這個原因導致。檢測出來的其他特效也會閃退,但不知道為何ClampVelocityModule的minMaxState的x為何會影響,需要藉助源碼查看原因了。請問大家有源碼可以提供麼?

A:從源碼上看,minMaxState的x、y、z需要做到State同步。

可以根據自己的Unity版本,到官方的Git下載:https://github.com/Unity-Tech...

感謝廖武興@UWA問答社區提供了回答

封面圖來源於網絡


今天的分享就到這裏。當然,生有涯而知無涯。在漫漫的開發週期中,您看到的這些問題也許都只是冰山一角,我們早已在UWA問答網站上準備了更多的技術話題等你一起來探索和分享。歡迎熱愛進步的你加入,也許你的方法恰能解別人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官網:www.uwa4d.com
官方技術博客:blog.uwa4d.com
官方問答社區:answer.uwa4d.com
UWA學堂:edu.uwa4d.com
官方技術QQ羣:793972859(原羣已滿員)

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.