godot2d的一些使用技巧(1)

前言吐槽:不得不说,godot作为一款冷门引擎,可查阅的资料几乎只有godot官网的QA或者reddit、*几个网站,贴吧、B站、知乎的资料虽有零散,但有关C#的太少了。

 

1、godot在windows平台的开发需要两个部分,godot引擎本体和导出模板,mono版和standard版是分开的,只有mono版才能使用C#脚本,导出模板版本需要和引擎版本相同,导出模板包含了所有目标导出平台的模板。

2、使用VS code编辑脚本:在godot的编辑器——编辑器设置——Text Editor——External中,勾选Use External Editor,Exec Path选中VS code的可执行文件(.exe)。

另外,使用vs code的时候要先安装C#插件;使用VS code好处是可以享受内部编辑器没有的代码提示和debug,缺点是每次修改完后godot都会出现报错提示脚本被外部打开。

3、VS code打开脚本无法正常代码提示:VS code——文件——打开文件夹,选择项目的根目录,.sln文件存放在项目根目录中,VS code会自动读取.sln文件,等读取完毕后VS code左下角的OmniSharp Server(火焰图标)会变亮,在它右边会显示当前项目名+.sln。

4、有时VS code的debug功能会出错,可以直接点左下角当前项目名+.sln,VS code上方会出现项目路径,点击后就会重新读取项目,一般出错就会消失,如果还是报错,请检查代码是否有问题。

5、godot的资源读取:

  1:.png文件(贴图)

Texture texture = (Texture)GD.Load("res://textures/icon.png");//有时会用替换sprite的图片上

  2:.tscn文件(保存为资源的节点或场景)

Node node= GD.Load<PackedScene>("res://prefabs/Enemy.tscn").Instance();

6、保存为资源的节点实例化并添加到某个父节点下:

this.AddChild(GD.Load<PackedScene>("res://prefabs/ExitGameUIController.tscn").Instance());//节点首先要被读取,然后实例化(存在但无法显示),最后成为某个节点的子节点才能显示在场景中

7、信号连接的几种方法:

  1:信号不自带参数传递

    public override void _Ready()
    {
        timer = this.GetNode<Timer>("Timer");
        timer.Connect("timeout", this, nameof(rebuildenemy));
        _loadenemy();
    }
    private void rebuildenemy()
    {
        _loadenemy();
    }

  2:信号自带参数传递,如RigidBody2D的body_entered(body_Node)会传入与本体碰撞的其他碰撞体。

    public override void _Ready()
    {
        GetNode<RigidBody2D>("bulletRigidBody2D").Connect("body_entered",this,nameof(_destroy));
        
    }
    private void _destroy(Node node)
    {
        if (node.Name =="EnemyRigidBody2D")//判断其他碰撞体的名字
        {
            this.QueueFree();//销毁自己及所有子节点
        }
    }

暂时写这么多,想到什么能写的话就下次再写。

上一篇:11.移动广告


下一篇:Godot边缘检测和鼠标捕获