Godot入门基础

1,548 阅读4分钟

基本概念

godot主要由节点、场景、信号构成。

节点是godot的基本构成元素,例如游戏界面中的开始游戏按钮是一个节点,游戏中的道具、背景、操作元素都是一个节点;而场景则是节点搭建构成的集合,例如游戏的开始界面、战斗界面、背包界面;信号则可以理解为节点与节点之间的特殊交互,也可以认为是节点发生特定事件发出的动作,例如主角生命条为0,发出信号表示游戏失败、操纵角色碰到障碍物,游戏中进行提示等操作。

基于godot的设计方式使得我们可以直接通过玩家玩到的游戏界面将游戏拆分成不同场景(模块),再通过拆分将场景分解为不同的节点,这有利于设计游戏、迭代游戏,也能够得到一个清晰的游戏结构。

前置Tips

godot是需要框架编译(build) 后才能运行场景进行测试,而运行场景时会提示是否设置主场景,我们可以将主场景理解为每次打开游戏的开始界面。

修改主场景和复用场景

  1. 运行此项目(F5)设置主场景

  2. 通过修改项目根目录下的project.godot文件修改

    run/main_scene="res://node_2d.tscn"
    
    • 每个场景都是一个tscn文件(text scene) ,场景类似于class,我们实例化一个场景即new一个class,可以复用该场景。使用(ctrl+D)快速复制实例化场景。
    • 可以调整每个实例的属性使他们和原有的class不相同,而被调整过的属性旁边会有复原按钮,点击即可恢复原有实例的默认属性。

使用Godot注意事项

godot主要使用的2D\3D\script界面

2D界面

在2D界面中代表主视口(游玩视角的坐标轴):右下角(坐标轴都是正),调整图片时视角缩放为100%(符合最终游戏测试效果)

script界面

在Script界面编写脚本,可以使用vscode作为外部编辑器,主要操作如下:

  1. godot中设置外部编辑器->vscode

  2. vscode下载扩展C# Tools for Godot,扩展设置-》你的电脑中godot的路径

  3. ctrl+shift+p运行命令: C# Godot: Generate Assets for Build and Debug ,生成带有launch.json和tasks.json的.vscode文件夹

  4. F5进行调试,运行并build godot

在Godot中使用C#

  1. class名称应与.cs文件名相同
  2. CS1612错误——》若要修改结构,请首先将其赋给局部变量,修改该变量,然后将变量赋回集合中的项。/ 使用with表达式
  3. for循环中不要重复声明对象(类似js中会被声明10次,可以先声明再在循环中修改
    • godot中使用C#实质:继承GD类,重写其中的方法

设置项目

项目-项目设置-可设置窗口大小;在拉伸选项中,将模式设置为 canvas_items,将比例设置为 keep。这样就可以保证在不同大小的屏幕上,游戏都能够进行一致的比例缩放。

设置场景

可以将一个场景设置为对象的子节点不可被选择(类似ps中成组)ctrl+G或直接点击对应图标,避免意外移动这个模块内部的其他小节点。

使用信号连接场景

信号,简单来说就是节点发生特定事件发出的动作(有点类似于js中的调用函数)

信号连接场景主要指一个节点的变化引起另一个节点的变化,操作如下:

在节点右侧(信号栏),选择需要使用的信号,需要连接的节点,点击连接,即可在脚本文件(.cs) 中编写与使用信号相同的名称的函数

//此类函数在godot中为小写,.cs文件中要大写
private void OnButtonPressed()   //在godot信号页面显示的为_on_button_pressed
    {
        SetProcess(!IsProcessing());
    }
  • 脚本(script)的生命周期

    新建脚本时能够看到预设的_Ready _Process函数,表示场景渲染完成后立即执行or运行中执行的操作,可以在对应函数内编写想要完成的结果。

  • 在godot中查看信号

    编写完cs文件后,需要重新build godot项目才能够查看到信号在godot中显示。

自定义信号

  1. 声明信号,需要以EventHandler结尾,声明后需要build项目才能够在右侧看到信号的显示
//声明信号,需要以EventHandler结尾
	[Signal]
	public delegate void HealthDepletedEventHandler();

//有参数的信号
	[Signal]
    public delegate void HealthChangedEventHandler(int oldValue, int newValue);
  1. 发出信号
//EmitSignal(SignalName.信号名称);
EmitSignal(SignalName.HealthDepleted);

设置可以在编辑器中编辑的属性

通过Export设置的属性能够在godot检查器当中查看并修改(build后查看)

[Export]
	public int Speed {get;set;}=400;