2017-03-16 28 views
2

我的同事說剩下的Debug.Log會導致延遲。 但我認爲它對於加強和加速我們的發展很有用。 此外,我發現有一個選項可以禁用生產環境中的Debug.LogDebug.Log是否會導致Unity構建中的延遲?

給我你的意見。

+1

Debug.Log意味着一個發佈構建這些調用將被刪除使用如果defs,但你應該檢查 –

回答

3

當調用Debug.Log()時,會影響性能,因爲它會執行一些堆棧跟蹤解析,然後將一些內容寫入文件。

它必須深入到堆棧跟蹤中,所以如果您有很多Debug.Log s,那麼您的構建中可能會看到性能下降。

您可能想要在Debug Build中只調用Debug.Log語句來規避此情況。從Unity Docs

在Build Settings對話框中有一個名爲「Development Build」的複選框。

所以你可以做這樣的事情,如果被選中的盒子,只叫:

if (Debug.isDebugBuild) { 
    Debug.Log ("If you can see this, you are in Debug Mode"); 
} 

一種更簡便的方法是去播放器設置,並取消勾選「使用播放器日誌」: enter image description here

這會停止正在寫入的日誌文件。

3

如果你有每幀幾個日誌然後是的,它會降低你的表現。但是,聰明地使用它只會爲你的代碼中的內容提供非常重要的反饋。它還有助於檢測,例如不工作某些Web服務或任何您無法預測的事情。我的建議是使用日誌記錄,但這樣做很聰明

我建議你寫的是你自己的記錄類。然後,您可以禁用/啓用特定類型/場景/環境/任何日誌記錄。此外,我更喜歡在乞討中添加日誌的位置,例如[ClassName.MethodName()] LOG-MESSAGE 創建您自己的記錄器類將爲您帶來諸多好處,但它不會佔用您太多時間。我個人爲自己製作了自定義記錄器類,它可以禁用特定類型的日誌(因此,您可以在不更改代碼的情況下打開/關閉調試,只需一個標記)並格式化日誌消息,使其看起來更好。無論如何,它在結尾使用Debug.Log。它被編譯爲分隔程序集,因此如果您在Unity控制檯中單擊日誌,它仍會將您重定向到觸發日誌的代碼行。如果您不會將它編譯到程序集中,它會將您重定向到觸發Debug.Log的自定義記錄器方法。

這只是我使用自定義記錄器的建議,但通常我強烈建議使用記錄。 當用戶做了一些有趣的事情時觸發的日誌對真的不會影響你的應用程序。

+1

只是一個小問題,你如何設法得到類和方法的名稱? 我試過[diferent](http://stackoverflow.com/questions/2113069/c-sharp-getting-its-own-class-name)在c#中的aproaches,但似乎並沒有工作和[其他](HTTP://answers.unity3d。com/questions/126315/debuglog-in-build.html)看起來太複雜了。 我能記錄的最多的是UnityObjectName +消息。 這是一個麻煩,因爲我有一個正在調試的靜態方法,但正如你所知,Unity中的雙擊顯示了我的方法,而不是調用它的類和方法。 –

+1

像這樣: string stackTrace = UnityEngine.StackTraceUtility.ExtractStackTrace(); string [] array = stackTrace.Split(new string [] {「\ n」},StringSplitOptions.None); 然後,在數組中,您將每個堆棧跟蹤幀分開。去嘗試一下! 結果會是這樣: [方法callind的debug.log] [上一頁方法] [上一頁方法] 等.. 如果您編譯記錄器類分離組件(只需創建分離統一項目和谷歌如何生產裝配,讓我知道如果你有問題),雙擊後它會表現得如你所願 – piotrmitrega

+0

你好!我只是嘗試你的解決方案,它似乎不是我正在尋找的,或者我只是做了一些錯誤的事情。任何方式,你的代碼顯示我在Unity中的日誌處理堆棧,但由於所有的日誌來自我的日誌實施堆棧顯示我自己的腳本,我不知道我是否犯了錯誤,但感謝您的幫助,我要繼續我的研究。 –