最近开始学习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"
}
]
}