Unity趟坑問題彙總

在使用Unity引擎開發的過程當中總會遇到各類各樣的問題,有些問題很坑,只有遇到的才懂,爲了不之後本身再被同一塊石頭絆倒,特地在此作個整理,但願能給你們節省一些時間,有一樣遇到坑的小夥伴也能夠把問題或解決方法寫在樓下,以供其餘小夥伴參考。趟過的坑會持續整理。html

C#的坑

JsonUtility轉數組BUG
現象:json

string json = "[1, 2, 3]";
int[] array = JsonUtility.FromJson<int[]>(json); // 報錯

JsonUtility轉數組BUG

解決:
https://segmentfault.com/a/11...segmentfault

UGUI的坑

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;
    }
}

Android的坑

IL2CPP發佈失敗
現象:
Failed running:C:.../il2cpp.exe --convert-to-cpp
Exception:C:.../il2cpp.exe did not run property!
IL2CPP發佈錯誤動畫

解決:
升級Unity版本(雖然沒從根本上解決問題 可是升級一個小版本就發佈成功了 版本的嫌疑最大)ui

IOS的坑

IOS上Animator動畫系統很差使了
現象:
IOS系統上 全部Animator的動畫全不播放了 其餘Tween動畫和粒子動畫正常 Animaton的播放不了 資源是AssetBundle動態加載的this

解決:
發佈設置中的StripEngineCode = falselua

緣由:
StripEngineCode啓用該選項時 會剝離無用的代碼 致使該問題
官方說明:
https://docs.unity3d.com/Scri...spa

說明翻譯:
若是啓用了該功能,那麼在IL2CPP構建中,將刪除Unity引擎代碼庫中未使用的模塊和類。這將致使更小的二進制大小。建議使用此設置,然而,若是您懷疑這會致使項目出現問題,您也許想禁用它。注意,爲IL2CPP腳本後端託管程序集的字節代碼剝離是始終啓用的。

SLua的坑

Vector2不能被除
現象:
touch.deltaPosition / 2 會致使代碼報錯 程序沒法運行 由於slua不支持Vector2的除法 Vector3的支持 這個坑我也是醉了 作觸點識別的時候趟出來的坑
Vector2不能被除

解決:
x、y 分別除

RenderTexture 寬高不能用浮點數賦值
現象:
renderTexture.width = width
RenderTexture.Create failed: width & height must be larger than 0
RenderTexture坑

解決:
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

相關文章
相關標籤/搜索