godot4.x vscode c# 调试配置

815 阅读1分钟

最近开始学习godot引擎。用C#跟着一些教程做还是碰到很多问题。
现在是使用4.2.2版本
首先是在官方文档中发现的问题。C#目前支持还不太好,引擎的内置编辑器没有支持。而且godot4.x相对于3.x在导出的支持上还变差了。
4.x不支持导出web。我认为导出web,对于分享初期的一些小游戏比较方便,可以直接放到静态网站上。

还有就是官方文档里面对C#的支持也不好,还有社区,网上大多数是gdscript的教程。因为我认为gdscript就是个阉割版python,没什么好学的,而且性能比c#差挺多。所以我就是从c#来上手。
只要做大做久一点的游戏,我还是倾向于c#,小游戏,放到web上的,我觉得用gdscript也比较好。

碰到信号有关的问题,教程是gds,可以直接拖动ui到编辑器里自动生成代码。 但是c#就不支持。。。这些导致我上网上查。

碰到一个计时器的问题,

@onready var timer = $Timer

C#的使用我问了GPT才知道,除了编辑器那里timer节点的信号要开启一下。 之后,C#里面需要手动获取节点

  _timer = GetNode<Timer>("Timer");
  _timer.Start();

有一个问题是GetNode里面的参数,我一开始不知道怎么传(就是传Path,但是和python不一样,没有美元符号),计时器没生效,所以想打断点调试来排查问题。 结果查了半天,发现godot vscode插件,现在只支持3.x的调试。。。

最后从网上找到了解决方案,

因为我对.net相关的也不是很熟,似乎是用donet来构建debug版本进行调试

launch.json

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": ".NET Core Launch (console)",
      "type": "coreclr",
      "request": "launch",
      "preLaunchTask": "build",
      "program": "${env:GODOT_PATH}",
      "args": [],
      "cwd": "${workspaceFolder}",
      "stopAtEntry": false,
      "console": "internalConsole",
      "envFile": "${workspaceFolder}/.env"
    },
    {
      "name": ".NET Core Attach",
      "type": "coreclr",
      "request": "attach"
    }
  ]
}

这里我使用了.env文件,这样有利于复用配置

#.env
GODOT_PATH=C:\\home\\Projects\\game\\godot\\Godot_v4.2.2-stable_mono_win64\\Godot_v4.2.2-stable_mono_win64.exe

不过试了一下,发现envFile似乎有bug,最后还是在program直接配置路径

task.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build",
      "type": "shell",
      "command": "dotnet build '${workspaceFolder}/001 First Game.csproj' -c Debug -v normal -p:GodotTargetPlatform=windows",
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "presentation": {
        "reveal": "always"
      },
      "problemMatcher": "$msCompile"
    }
  ]
}