在使用Unity引擎開發的過程當中總會遇到各類各樣的問題,有些問題很坑,只有遇到的才懂,爲了不之後本身再被同一塊石頭絆倒,特地在此作個整理,但願能給你們節省一些時間,有一樣遇到坑的小夥伴也能夠把問題或解決方法寫在樓下,以供其餘小夥伴參考。趟過的坑會持續整理。html
JsonUtility轉數組BUG
現象:json
string json = "[1, 2, 3]"; int[] array = JsonUtility.FromJson<int[]>(json); // 報錯
解決:
https://segmentfault.com/a/11...segmentfault
ContentSizeFitter自適應寬高的BUG
現象:
自適應寬高的UI嵌套多了之後 子節點改變寬高 UI沒法正確適應
好比嵌套多級的下拉列表 子節點展開後會擠在一塊兒 摺疊後會空出一塊 父節點不會自適應後端
解決:
手動調用自適應方法:LayoutRebuilder.ForceRebuildLayoutImmediate(rectTrans)數組
// UGUI的自適應 嵌套多了有BUG 手動調用一下 private void ResizeContent() { Transform content = this.content; while (content != null) { ContentSizeFitter fitter = content.GetComponent<ContentSizeFitter>(); if (fitter != null) { RectTransform rectTrans = content.GetComponent<RectTransform>(); LayoutRebuilder.ForceRebuildLayoutImmediate(rectTrans); } content = content.parent; } }
IL2CPP發佈失敗
現象:
Failed running:C:.../il2cpp.exe --convert-to-cpp
Exception:C:.../il2cpp.exe did not run property!動畫
解決:
升級Unity版本(雖然沒從根本上解決問題 可是升級一個小版本就發佈成功了 版本的嫌疑最大)ui
IOS上Animator動畫系統很差使了
現象:
IOS系統上 全部Animator的動畫全不播放了 其餘Tween動畫和粒子動畫正常 Animaton的播放不了 資源是AssetBundle動態加載的this
解決:
發佈設置中的StripEngineCode = falselua
緣由:
StripEngineCode啓用該選項時 會剝離無用的代碼 致使該問題
官方說明:
https://docs.unity3d.com/Scri...spa
說明翻譯:
若是啓用了該功能,那麼在IL2CPP構建中,將刪除Unity引擎代碼庫中未使用的模塊和類。這將致使更小的二進制大小。建議使用此設置,然而,若是您懷疑這會致使項目出現問題,您也許想禁用它。注意,爲IL2CPP腳本後端託管程序集的字節代碼剝離是始終啓用的。
Vector2不能被除
現象:
touch.deltaPosition / 2 會致使代碼報錯 程序沒法運行 由於slua不支持Vector2的除法 Vector3的支持 這個坑我也是醉了 作觸點識別的時候趟出來的坑
解決:
x、y 分別除
RenderTexture 寬高不能用浮點數賦值
現象:
renderTexture.width = width
RenderTexture.Create failed: width & height must be larger than 0
解決:
renderTexture.width = math.floor(width) -- 轉成整數
Vector3在lua裏是引用類型 不是值類型
現象:計算拋物線彈道時,在C#計算時軌跡正確,轉成lua時軌跡就錯誤了
利用方法傳進去的參數是Vector3類型 方法內計算Vector3後 外面的參數值也變了
-- 計算拋物線物體在下一幀的位置
function this.getParabolaNextPosition(position, velocity, gravity, time)
-- velocity在lua裏是引用類型了 不能隨便修改 velocity.y = velocity.y + gravity * time return position + velocity * time
end
解決:
function this.getParabolaNextPosition(position, velocity, gravity, time)
-- 拷貝Vector3的值 local v = Vector3(velocity.x, velocity.y, velocity.z) v.y = v.y + gravity * time return position + v * time
end