封装Debug.Log 游戏发布关闭 Log 减少性能消耗

本文讨论了在游戏发布时如何通过封装Debug.Log来减少性能消耗。由于Unity的Debug.Log在发布版中仍会运行并影响性能,作者提出创建一个自定义DLL来控制日志输出。通过实例,展示了未封装Log导致的CPU峰值和FPS下降,并介绍了如何新建Library项目、引用UnityEngine.dll、设置.NET版本以及生成和使用SNKDebug.dll,以便在需要时关闭Log输出。
摘要由CSDN通过智能技术生成

在游戏发布时,有很多东西需要进行优化 ,消耗性能的东西 能减少就减少。

UnityEngine.Debug.Log 是很消耗性能的操作,即使我们选择的是Release 版本发布,这个函数仍然会执行并且输出Log ,不仅影响性能,还有可能泄漏隐私。所以我们在发布上线时会关掉Log。

比如下面这段代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using UnityEngine;
using System.Collections;
 
public class NewBehaviourScript : MonoBehaviour {
 
// Use this for initialization
void Start () {
}
 
void OnGUI()
{
if (GUILayout.Button( "Log" ))
{
Debug.Log( "test Log" );
Debug.LogWarning( "test LogWarning" );
Debug.LogError( "test LogError" );
}
}
 
// Update is called once per frame
void Update () {
 
}
}

运行之后在界面上会有 一个按钮 ,点击之后会输出 Log 。

我们打开 Profiler 来监测 CPU的消耗。

可以看到 在点击按钮时,CPU 出现了一个小 波峰。 FPS从1000 掉到了 250 。

点击该波峰,定位到 对应的函数 ,可以看到 输出Log 占用了 84.8% 的CPU(当前)。

赶紧把它干掉吧。

我们来封装一个 LOG,编译成DLL,可以自己控制是否输出Log。

首先用MonoDevelop 新建一个 Library 项目。

右键References , 引用 UnityEngine.dll 。

右键 SNKDebug项目,点击Option 打开设置界面,设置.Net 为 2.0 。

[

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**************************
* 文件名:SNKDebuger.cs;
* 文件描述:Unity Log的封装;
***************************/
 
using UnityEngine;
using System.Collections;
 
public class SNKDebuger  {
 
static public bool EnableLog = true ;
static public void Log( object message)
{
Log(message, null );
}
static public void Log( object message, Object context)
{
if (EnableLog)
{
Debug.Log(message,context);
}
}
static public void LogError( object message)
{
LogError(message, null );
}
static public void LogError( object message, Object context)
{
if (EnableLog)
{
Debug.LogError(message,context);
}
}
static public void LogWarning( object message)
{
LogWarning(message, null );
}
static public void LogWarning( object message, Object context)
{
if (EnableLog)
{
Debug.LogWarning(message,context);
}
}
}
 
[

把解决方案配置修改为  Release , 然后点击菜单栏 Build – Build ALL

找到生成的 SNKDebug.dll ,拖到Unity 中,然后像下面使用

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using UnityEngine;
using System.Collections;
 
public class NewBehaviourScript : MonoBehaviour {
 
// Use this for initialization
void Start () {
 
//SNKDebuger.EnableLog = false;
 
}
 
void OnGUI()
{
if (GUILayout.Button( "Log" ))
{
SNKDebuger.Log( "test Log" );
SNKDebuger.LogWarning( "test LogWarning" );
SNKDebuger.LogError( "test LogError" );
}
}
 
// Update is called once per frame
void Update () {
 
}
}

如果需要关闭Log ,只需要设置

?
1
SNKDebuger.EnableLog = false ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值