天天看點

unity 項目強制退出通知伺服器,Unity WARNING 常見問題

有一個懸崖

旁邊立個牌子-上面寫着-warning

隻有程式員掉下去了

Warning 就是潛在的問題

目前項目的warning log 大多數都是定義了變量但未使用,也有少量的代碼編寫問題。盡量減少warning,對于無法避免的warning ,可以添加#pragma warning disable屏蔽目前警告。但不能濫用,對于新出現的warning 要有針對的解決,盡量做到無 warning。通過檢視warning log 可以發現很多代碼問題,通過項目前100多個warning歸納如下:

命名 不能和unity 内置的名字重複,比如常見的name(會有警告),m_Name(會有報錯日志,曾經出現過UI沒辦法在編輯器裡關聯這個UI對象);

子類中命名函數和父類中函數一緻,注意需要改為override還是使用new 定義為子類新函數。

值類型對象是不需要和null進行比較的,因為傳回的永遠是true。作為if 條件的話,else語句永遠不會被執行到。

定義了很多變量,但沒有使用。特别是還通過邏輯處理給變量指派了,卻沒有使用。多餘的運算量。

代碼編寫注意,複制粘貼錯誤,無意義的定義指派。

int nTempIndex = nTempIndex = (nShowLayer - 1) % m_arrSamsaraGroup.Count;

注釋不需要的代碼時候,要注意前面定義并且不再使用的變量也要一起注釋掉,發否就會出現4 中的情況。

好多地方用了try{}catch(Exception e),卻沒有列印出exception内容。對于異常情況,能處理的盡量處理,是在不能處理了在用try / catch。參考

old:

int num = red_world_min_currency;

try

{

num = int.Parse(m_uiNeedAncientJadeInput.value);

}

catch (Exception e)

{

}

new:

int num = red_world_min_number;

if (m_uiRedBagNumberInput!= null)

{

if (!int.TryParse(m_uiRedBagNumberInput.value, out num))

{

num = red_world_min_number;

}

}

棄用的邏輯,在代碼中間直接return的。編輯器會報警告

warning CS0429: Unreachable expression code detected

要麼就注釋掉後面的代碼,如果不想注釋,那就加上 #pragma warning disable

代碼邏輯,false 與其他沒意義,這樣書寫會影響代碼閱讀性。

CommonDesigner.SetObjectVisable(m_aNearByReliveCDLabel.gameObject,false && !bInMirror);

通過查warning log 也可以發現問題。如下,log 為

The variable `tmpValue' is assigned but its value is never used

可以發現本意是用來做大小值交換的,卻沒有使用中間值交換,結果肯定是有bug的。

float tmpValue = 0;

if (fMinValue > fMaxValue)

{

tmpValue = fMinValue;

fMinValue = fMaxValue;

fMaxValue = fMinValue;

}

unity 有些api 并沒有跟版本更新api,會有警告log。