不知道大家在開發 Unity 的時候是否遇到過這種錯誤訊息呢?
 
count <= std::numeric_limits<UInt16>::max()
UnityEditor.DockArea:OnGUI()
maxVertices < 65536 && maxIndices < 65536*3
 

image01.jpg

 
其實這種錯誤訊息很簡單,意思就是你有些項目超出了 Unity 所能承受的範圍。
 
 
遇到這問題有可能是你的 3D 模型太大了,網路上也有人遇到該問題。
原因是他的網格 (Mesh) 數量太多,所以只要 3D 模組 "頂點數量" 或者 "面數" 不要超出 65536 就行了。
 
 
而我也遇到這問題了,後來發現,原來是我 Debug.Log 的訊息太長!
Unity Console 視窗裡的每一則訊息,能接受的字串長度為 65536 byte,所以當 Debug.Log 的訊息長度超出它所能接受的範圍,那它就會出現錯誤訊息。

image02.jpg

 
 
所以當你知道 Debug.Log 的訊息可能很長的話,你可以事先做檢查長度,再看要多印幾個 Log,或者直接將超出長度的字串移除。
 
 
這邊說明一下怎麼檢查長度:
 
因為只能接受 65536 byte,而字串就是由一堆字元所組合起來的,一個字元的長度為 4 byte,所以這邊將 65536 / 4 = 16384 個字元。
但是 Unity 會自動在你的 Log 後面補上 "\n"(換行字元) + "UnityEngine.Debug:Log(Object)" 這一段,而這一段是 30 個字元,所以 16384 - 30 = 16354 個字元。
不過好像還有字串結尾的空字元或者哪邊有被補上其它奇怪的字元?所以要再減掉一個字元 16354 - 1 = 16353 個字元。
 
因此,你的 Log 訊息不能夠超出 16353 個字元,不能超出就是不能等於不能剛好的意思,所以你只能夠印 16352 個字元
 
 
不過還有一個有趣的地方!以下是我印出 16352 個字元的結果,確定在範圍內,沒有出現錯誤。

image03.jpg

 
但我如果點選了該訊息的話,錯誤就又出現了!

image04.jpg

 
 
我測試幾次之後發現,它只能夠是 16283 個字元,只要超出一個字元而且被點選了,它就會報錯!
 
原來是因為點選該筆訊息之後,Unity 將該筆訊息傳遞給詳細訊息框去顯示時,會再補上 YuehTest:Update() (at Assets/Script/IntegrationTest/YuehTest.cs:23) 這段文字!
image05.jpg

 

這段文字 67 個字元再加上換行、結尾,所以它才再多出這 69 個字元吧?!
 
 
結論:
你可以在印 Log 之前檢查一下字串長度,但不需要抓得這麼精準,或許數量控制在 16000 個字元內就好,給它一些緩衝的空間吧!
 
arrow
arrow
    文章標籤
    Unity Error
    全站熱搜

    岳 發表在 痞客邦 留言(0) 人氣()