유니티/유니티 기능

상황에 따라 Debug.Log 제거하는 법

DOlpa_GB 2024. 10. 9. 18:54

이미 어느정도 예상은 하고 있었지만 스크립트안에 찍힌 로그가 많을시 

모바일 환경안에서는 CPU 사용량이 증가하여 성능에 영향을 준다고 한다

 

그리고 웬만한 로직보다 이 로그 연산이 더 무겁다고 하는데 사실인지는 모르겠지만 

중요한건 그 정도로 로그가 성능에 영향을 준다는것이다미 어느정도 예상은 하고 있었지만 스크립트안에 찍힌 로그가 많을시 모바일 환경안에서는 CPU 사용량이 증가하여 성능에 영향을 준다고 한다

 

그리고 웬만한 로직보다 이 로그 연산이 비용도 더 들고, GC도 많이 만든다고 한다

사실인지는 모르겠지만 중요한건 그 정도로 로그가 성능에 영향을 많이 준다는것이다

 

그렇기에 이번엔 로그를 상황에 따라 제거하고 생성하는 방법에 대해서 알아보겠다

using System;
using UnityEngine;

public static class Debug
{
    public static bool isDebugBuild
    {
        get { return UnityEngine.Debug.isDebugBuild; }
    }

    [System.Diagnostics.Conditional("DEBUG_MODE")]
    public static void Log(object message)
    {
#if (DEBUG_MODE)
        UnityEngine.Debug.Log(message);
#endif
    }

    [System.Diagnostics.Conditional("DEBUG_MODE")]
    public static void Log(object message, UnityEngine.Object context)
    {
#if (DEBUG_MODE)
        UnityEngine.Debug.Log(message, context);
#endif
    }

    [System.Diagnostics.Conditional("DEBUG_MODE")]
    public static void LogFormat(string format, params object[] args)
    {
#if (DEBUG_MODE)
        UnityEngine.Debug.LogFormat(format, args);
#endif
    }

    [System.Diagnostics.Conditional("DEBUG_MODE")]
    public static void LogError(object message)
    {
#if (DEBUG_MODE)
        UnityEngine.Debug.LogError(message);
#endif
    }

    [System.Diagnostics.Conditional("DEBUG_MODE")]
    public static void LogError(object message, UnityEngine.Object context)
    {
#if (DEBUG_MODE)
        UnityEngine.Debug.LogError(message, context);
#endif
    }

    [System.Diagnostics.Conditional("DEBUG_MODE")]
    public static void LogWarning(object message)
    {
#if (DEBUG_MODE)
        UnityEngine.Debug.LogWarning(message.ToString());
#endif
    }

    [System.Diagnostics.Conditional("DEBUG_MODE")]
    public static void LogWarning(object message, UnityEngine.Object context)
    {
#if (DEBUG_MODE)
        UnityEngine.Debug.LogWarning(message.ToString(), context);
#endif
    }

    [System.Diagnostics.Conditional("DEBUG_MODE")]
    public static void DrawLine(Vector3 start, Vector3 end, Color color = default(Color), float duration = 0.0f, bool depthTest = true)
    {
#if (DEBUG_MODE)
        UnityEngine.Debug.DrawLine(start, end, color, duration, depthTest);
#endif
    }

    [System.Diagnostics.Conditional("DEBUG_MODE")]
    public static void DrawRay(Vector3 start, Vector3 dir, Color color = default(Color), float duration = 0.0f, bool depthTest = true)
    {
#if (DEBUG_MODE)
        UnityEngine.Debug.DrawRay(start, dir, color, duration, depthTest);
#endif
    }

    [System.Diagnostics.Conditional("DEBUG_MODE")]
    public static void Assert(bool condition)
    {
#if (DEBUG_MODE)
        if (!condition) throw new Exception();
#endif
    }
}

 

우선 코드이다. 이제 단계별로 쉽게 따라하기만 하면 된다. 

 

1. 유니티 내에서 아무 이름으로  C# 스크립트를 만든뒤 위 코드를 붙여넣는다

 

2. Edit - Project Setting을 열어준다

 

 

3. Player - Other Setting - Scripting Define Symbols 로 이동

 

4. '+' 아이콘 클릭뒤 "DEBUG_MODE"를 입력 후 Apply로 추가해주면 끝

 

이렇게 해도 당장 달라지는건 없다. 똑같이 로그는 로그창에 정상적으로 찍혀 나오지만

빌드하기 전 다시 이곳으로 돌아와 DEBUG_MODE를 제거해주는 순간

게임환경에서는 모든 로그가 제거되어 성능을 향상시킬 수 있다.

 

게임 개발할때 필수적으로 거쳐야하는 순서이니 잊지 않도록 하자

반응형