Files
netease-bedrock-wiki/mconline/15-玩法组件教程/10-模组SDK初步/5-打印信息并运调试运行.md
2025-08-25 18:36:29 +08:00

58 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
front: https://nie.res.netease.com/r/pic/20211104/69055361-2e7a-452f-8b1a-f23e1262a03a.jpg
hard: 高级
time: 10分钟
---
# 打印信息并运调试运行
懂得如何将信息打印到控制台上是一个合格的开发者必须具备的本领。在本节中我们将学习如何打印信息并调试运行。
## 学会打印日志并查看控制台
每次打开电脑开发版,我的世界开发工作台便会创建一个“**脚本测试日志**”窗口,这边是我们的脚本调试控制台。
在模组中,我们可以在任何位置凭借自己的意愿将任何模组中的上下文信息打印到控制台上。我们有两种打印方式。
### `print`
我们可以使用原生的`print`函数来打印信息。比如,这边是一个`print`函数的打印示例,它将在初始化模组服务端注册之前打印开始初始化的消息。
```python
@Mod.InitServer()
def DemoTutorialModServerInit(self):
print "===== init tutorial server ====="
serverApi.RegisterSystem("DemoTutorialMod", "Server", "Script_DemoTutorialMod.DemoTutorialServerSystem.DemoTutorialServerSystem")
```
### `mod_log`
我们还可以通过`mod_log`模块来打印信息。下面的示例中通过导入并执行`logger.info`打印了一个信息。
```python
from mod_log import logger
logger.info("print log: %s", "OK")
```
### 两者的不同
我们以下面代码为示例可以看到两种打印方式在控制台表现的不同。
```python
def OnActorHurtServer(self, args):
print "==== 使用print打印的日志 ==== "
logger.info("使用logger打印的日志")
comp = serverApi.GetEngineCompFactory().CreateAction(args["entityId"])
comp.SetMobKnockback(0.1, 0.1, 10.0, 1.0, 1.0)
```
![](./images/11.5_print.png)
## 使用热更新快速修复问题
我们的Python代码在游戏中支持热更新调试。在电脑开发版的游戏运行中时我们修改Python代码将导致文件在开发版中的重载。自动热更新主要用于修改函数内实现比如我可以修改击退威力使其增加为20那么我在游戏中就可以在下一次攻击时延长击退的距离。但是热更新对全局变量、新增类或文件无效。因为这些都是在Python代码运行一开始便初始化的内容热更新文件不会使其再次初始化所以可能会导致无效。
![](./images/11.5_overload.png)
我们将击退为例从10更改为20可以在控制台中看到热更新的信息。灵活掌握代码的热更新将有效大幅度减少开启关闭游戏的次数使调试更加方便。