# Godot
入门项目:https://github.com/clear-code-projects/UltimateGodotIntro2D
# 节点 Nodes
基础的元素,图像,声音,计时器...
可以把节点组合起来创建游戏的各个部分
# 场景
Ctrl+Shift+O: 打开场景快捷键
组织节点,显示简单
可以理解为画布,或者文件夹
可以把一个场景放在另一个场景中
# 子场景
Ctrl+Shift+A 可以实例化场景,可以放在另一个场景里面
# Godot 显示 UI
这是 Godot 显示的各个部分
在顶部可以切换 2D,3D
2D 的里面有一个蓝色的小框,是游戏当前显示的画面
# 节点
Ctrl+A 是快捷键创建节点
# Node2D
是 2D 的一个点,可以用于组织,比如命名 Level
旋转 level 就在旋转所有子节点
# Position
相对父节点的位置
# global_position
在全局的位置
# Sprite2D
可以显示图像的节点
-
Texture: 纹理,可以加入图片,直接拖入图片就可以添加
-
Offset, Transform: 可以水平,垂直翻转...
-
Region: 可以显示图像的一部分
节点的坐标
x 是横坐标,y 是纵坐标
# 改变类型
右键 change type 可以改变
也要在 script 的 extends 后面更改成对应的类型
# Timer
计时器
# GDScript
GDScript is python
# Variables
var a_string: String = 'test' | |
var arr : Array[int] = [1,2,3,4] | |
@export var speed : int = 1000 |
# export
可以在面板显示变量
# Const
const max_speed = 500 |
# 函数
func test(para_a: int, para_b: String) -> bool: | |
return true |
# 随机数
randi
返回一个整数随机数
# 类
script 总是加在一个 Node 上,
当我们用 GDscript 添加代码的时候,会创建一个类,默认的 attribute 和 method 会自动添加
# builtin 内置函数
# _ready()
当 Node 添加到树上时会调用
# _process(delta)
在游戏的每一帧运行
delta 是当前帧生成的时间
# 获得其他节点
# get_node()
get_node(nodepath) | |
get_node("Logo").rotation_degrees = 90 |
获得其他节点
也可以拖动
可以设置以唯一节点访问,这样拖进来是短的名字
# $ 符号
$nodepath |
# 添加脚本后
extends Sprite2D
extends 后面的要匹配类的类型
# 更新坐标
extends Sprite2D | |
func _ready() -> void: | |
position = Vector2(200,200) |
# 获得 attribute 名字
把鼠标悬停就可以了
# 文档
Ctrl 点击对应的字,就可以打开文档
Ctrl+W 可以关闭文档
# 输入
Project, Project Setting, Input Map 里面可以添加动作,比如 left
右边的 + 号可以添加按键,创建一个 left 比如说
在 GDScript 里面,可以用 Input
Input.is_action_pressed("left") |
# 方向移动
# get_vector
用 getvector 比较方便,通过绑定 4 个方向的按键来返回方向
# Vector2
# RIGHT
Vector2.RIGHT 右向量
# normalized
normalized 可以把模变成 1
# angle
得到角度,弧度制
# rad to dag
rad_to_dag
可以把弧度转换成角度
# 鼠标
# 鼠标位置
get_global_mouse_position()
# 物理
# 节点
# Area2D
可以检测其他节点是否进入区域
Player 之类的可以移动的
body_entered
- rotation 旋转,弧度表示
rotation_degrees
旋转,角度表示
# StaticBody2D
墙,之类的,可以被碰撞
# RigidBody2D
需要高级物理特性的实体
比如手榴弹,可以自己移动的
- gravity scale: 重力
- Physical Matrial 物理材质,可以新建弹跳
- Fiction: 摩擦力
- bounce: 弹力
- Damp: 阻尼
# CharactorBody2D
由代码控制的实体,比如 player, enemies
- velocity 移动速度
move_and_slide()
带碰撞的更新位置,包含 deltalook_at()
可以旋转到某个向量
# 形状
一个物理体必须有个形状
# CollisionShape2D
Shape 里面选择 Rectangle 之类的,然后调整
按 alt,可以双向调整形状
# 信号
在 Node 右边里面可以看到列出的信号,可以双击使用某个信号
# 自定义信号
# 创建信号
signal player_entered_game
signal laser(pos)
# 触发信号
player_entered_game.emit()
# 自定义场景
有时候需要动态的创建场景
var laser_scene: PackedScene = preload("xxx.tscn")
var laser = laser_scene.instantiate()
add_child(laser)
# 带提示的 instantiate
var grenade = grenade_scene.instantiate() as RigidBody2D
# 相机
# Camera
用 Camera 添加
- Smooth 平滑移动,可以设置成 5
- zoom 缩放
# 窗口分辨率
Project Setting, Display 里面
# 关卡设计
# Region
选择它刚开始什么都没有
- Edit Region 可以编辑要显示的纹理,也可以选择比较大的区域,但是会拉伸边界像素,可以到 Texture 里面的 Repeat 更改 Enable 就可以复制了
# Visibility
- Modulate 可以改变颜色, 会影响子结点
- Self Modulate 调节自己的颜色
# Tilemap
可以选择某些各自,防到特定的地方
- TileSet 里面新建一个,在底下可以看到 TileSet 和 TileMap
- physical layer 可以设置碰撞图层
- Tile Shape 可以选择瓷砖形状
- Tile Size 可以设置大小
# TileSet
拖入图片可以加入一个 TileSet
- Name 可以改名字
- Margin 可以改边距
- Paint 可以添加属性,
- 设置完碰撞图层后,可以在 physical layer 绘制碰撞区域
- 三个点可以选择水平翻转,R 快捷键也可以
# TileMap
选择图块,点到关卡上
# 图层
可以对不同的对象分配不同的图层,在 Collision 里面设置
# Layer
它在哪个图层
# 图层命名
Project Settings 里面的 2D Physics 可以对图层命名,设置好后,鼠标悬停在 Layer 上面可以看到注释
# Mask
可以与哪个图层交互
# 粒子
# GPUParticles2D
适用于 GPU 的粒子发射器
-
amount 设置发射粒子数量
-
Process Matrial 可以选择 ParticalProcessMatrial
# ParticalProcessMatrial
- Spawn, position, emision shape: 可以设置发射粒子形状,direction 改变方向
- accerleration, gravity 可以设置重力
- Shape, Scale 可以调整粒子大小
- Texture 设置纹理
- Display, Color Curve: 设置颜色, Color Ramp 设置渐变 (To check)
# 光源
# PointLight2D
点光源
- Texture 需要纹理
- Texture scale, 光照范围
- energy 光照强度
- Shadow 启动阴影
# LightOccluder2D
光遮挡器,可以绘制形状
- Filter 过滤器 PCF13 , 可以让阴影边界模糊化
# DirectionalLight2D
平行光
- Blend Mode: 加上模式和减去模式,减去模式可以让场景变暗
# 动画
# AnimatedSprite2D
播放一组图片
选择:载入后自动播放
# Sprite2D
# Animation
设置 Hframe 和 Vframe 是这里面有几行几列的图片
# AnimationPlayer
# Animation
点击创建新动画
右边可以设置动画时长
在 Sprite2D 的 frame 里面点右边的钥匙可以添加到 animation
# queue_free
删除节点
# UI
UI 主要使用 Control 节点
# Control
# Label
标签
# TextureRect
纹理矩形,可以放置图片
- Expandmode : 如果图片太大调成 fit height
# CanvasLayer
画布层,可以把 UI 绘制到上面,类似粘在相机上的玻璃。
# 锚点
固定在哪里
- Layout, Anchors Preset, Custom 自定义位置
- Anchors point: 区域比例,
0.25
就是25%
# 容器
确定子结点位置的父节点
# HBoxContainer
水平布局
# GridContainer
按网格,从左到右摆放
- Column 设置列数
- Theme Overrides, H Seperation 水平间距
- Horizontal allignment 水平对齐(居中)
# MarginContainer
边距容器
- Theme Override, Margin Bottom 底部边距
# Theme
在 Theme 里面新建主题,可以设置
# 字体
主题的统一字体
# 血量条
# Progressbar
- Layout, Custom Minimun Size 进度条大小
- Show precentage 显示百分比
# TextureProgressbar
带纹理的进度条
- Under 是进度条背景
- Progress 是进度条颜色
- Over 是覆盖层,可以做装饰