2016年5月11日 星期三

Unity對IPv6協定的支援

作者:MANTAS PUIDA 原文連結

Apple最近宣佈從2016年6月1日起“所有送到App Store的APP必須支援IPv6-only的網路。” 由於我們很多開發者都會發佈Unity製作的遊戲到App Store,所以我們花點時間來講解一下Unity對於IPv6-only網路的支援。注意,Apple這項規定針對不管新APP或已在架上的APP。

什麼是IPv6?


維基百科上寫道:“網際網路通訊協定第六版(IPv6)是最新版的網際網路通訊協定,這個通訊協定為網路上的電腦和路由通訊設備提供了身份識別和定位系統。”設備可以在純IPv4網路(前一個標準版本),和純IPv6網路或者兩個協定的混合網路上通行。蘋果的新要求代表所有的APP都必須可以在只使用IPv6協定的網路上運行。

重點是協定上IPv4 和 IPv6兩者之間是不能進行互通的,雖然可以使用其他通道技術在兩種類型的網路間進行資訊傳輸。

Unity支持IPv6嗎?


在iOS平臺上WWW和UnityWebRequest已經完美相容IPv6了,它們基於Apple高層的網路API。過去幾個月我們也在努力讓Unity的.NET/IL2CPP可以支援IPv6-only的網路。我們已知的最新.NET/IL2CPP支援IPv6相關的Bug已於補丁版5.3.4p4中修復。還有一個UNET相關的Bug會在後面幾週發佈的補丁版本修復。在此要感謝Unity社群熱心成員(如 Exit Games)的支持與回饋,我們得以解決了Unity引擎核心部分的一些Bug,並針對以下平臺完成了對IPv6的支援:
  • 編輯器:全平臺(Windows、Mac、Linux) 
  • PC端:全平臺(Windows、Mac、Linux) 
  • iOS 
  • Android 
我們後續還會繼續增加其它平臺的IPv6網路支援。

舊版Unity怎麼辦?


如果你的專案使用WWW或UnityWebRequest API從網路獲取資源,就不用擔心這個問題。但如果是用其他網路方式存取,就要小心測試了。

我們會將.NET/IL2CPP修復更新到一些舊版Unity系列中,計畫將以4.7.2,5.1.5,5.2.5的版本發佈。

現在該做什麼?


首先,你應該將你的遊戲設定為僅使用IPv6網路的模式,然後測試遊戲的所有功能是否正常。Apple已經提供了如何在OS X 10.11(或以上版本)的Mac電腦上設定IPv6網路的指南。這些操作步驟與App Store審查員使用的步驟是一樣的,所以測試IPv6網路時有很好的參考依據。由於IPv4與IPv6網路是互不相容的,請確保只使用IPv6網路來進行測試。如果你的設備同時擁有IPv6和IPv4位址,則socket會使用IPv4來連接網路。

然後,審查你的程式碼,看看是否可能存在下面的問題:

  • 注意IPv4格式位址的使用,應移除程式中所有寫死的IP位址(例如:8.8.4.4)。建議優先使用主機名稱(host name),設備可以根據當時正在使用的網路類型獲得對應的IPv4或IPv6地址。 
  • 注意IPAddress.AddressFamily屬性的用法。如果程式分支是根據該屬性值建立的,是否有專門處理IPv6分支的程式碼呢? 
  • 注意IPAddress.AnyIPAddress.Loopback屬性,這些欄位是為IPv4準備的。如需使用IPv6版本,請使用IPAddress.IPv6AnyIPAddress.IPv6Loopback欄位。 
如果遇到上述問題,請確保更新到已經修復該問題的Unity版本。如果你所使用的系列(4.7.x, 5.1.x, 5.2.x)暫未有修復,請待我們發佈補丁版本後再升級。

一些協力廠商的原生或託管的第三方程式可能也與IPv6網路不相容,這種情況下請聯繫第三方程式廠商諮詢相關的相容資訊。

最後,如果遇到任何與IPv6相關的Unity Bug請及時向我們回報,我們會儘快進行修復。針對App Store規定相關的問題,請訪問論壇的iOS和tvOS開發版塊,Unity官方工程師會及時解答大家的問題。

沒有留言:

張貼留言

著作人