5.Godot节点和功能及Node节点属性分析

1. 节点和功能的关系

  • 节点 Node ,用于实现一种功能,例如,Sprite 节点,用于图片的显示

  • 一个节点的功能取决于它挂载了哪些子节点,它包含了哪些功能的子节点,就包含了对应子节点表示的功能

  • 节点是可选的,可以添加、可以删除,就代表添加哪些功能,删除哪些功能

  • 先创建一个空的节点,再选择需要的节点

    有一个player节点,给player节点挂载一个sprite节点,用来显示一张图片
    再挂载一个rigidbody2d节点,把它表示成一个刚体的节点,给player赋予刚体的功能

  1. 先把node2d更改类型

在下面挂载一个node2d节点,命名为player

  1. 再挂载一个图片,说明这个节点是有图片要显示的
  2. 给player增加一个刚体的功能,继续添加子节点
  1. 这里提示需要再添加一个碰撞体
  1. 提示需要给碰撞体选择一个形状

  2. 在右边选择一个长方体的样式

  3. 再添加一个remotetransform2d

    把它关联到刚才的sprite节点

现在就给player添加了一个刚体的功能

运行这个场景,就会发现player节点会下落

在场景中鼠标左键按住,从右下往左上划,选中player中的所有结点,然后可以拖动改变位置

如果不想要这个功能了,可以删除rigidbody2d节点

在Godot中所有的操作都是基于节点的,节点就是功能,功能就是节点

2. Node节点

  • Node节点,是基类节点,所有节点都会继承Node节点,所以其它类型都包含Node节点的功能
  • Node节点是最核心的节点,所有其他类型节点都是由Node节点派生出来的

当新建一个场景的时候,会默认创建一个node2d节点

把它改变成node节点

1. Editor Description

在右边检查器里面,node节点第一个功能是可以往里面写描述,相当于注释

2. Script

node节点最主要的功能就是可以挂载脚本

Script的属性就是挂载脚本

左上角这里点击创建脚本,会自动挂载到node节点上

点击添加脚本

输入print("hello")

点击运行当前场景,发现控制台输出了一个hello

刚才添加的脚本会把脚本的属性赋值给Script

可以点击解除脚本

或者在右边的检查器node属性里面切换Script属性解除脚本

还可以将脚本拖到Script属性这里添加脚本

这些操作都可以实现

挂载好脚本以后,就可以在脚本里面写自己的逻辑

脚本基础函数介绍

_ready函数,脚本初始化会首先调用这个方法,会在_process()这个函数之前调用,就相当于main函数,一个初始化函数
_process函数,每一帧都会调用这个函数,因为游戏是一帧一帧渲染到屏幕上的,每渲染一帧都会自动调用这个函数,可以在这个函数里面写一些游戏逻辑,也就是写逻辑的时候主要用的函数

在这里定义了一个变量,每一帧就把这个变量加1

每60帧输出一个日志

复制代码
extends Node

# 脚本初始化会首先调用这个方法,会在_process()方法之前调用
func _ready():
	# get_tree().paused = true
	print("hello")
	pass

var count = 0
# 每一帧都会调用这个方法
func _process(delta):
	count = count + 1
	
	if (count % 60 == 0):
		print("node")
	pass

运行这段代码

每60帧相当于大概1秒钟,可以观察到脚本的执行顺序

这两个函数是脚本最主要的函数,也是用的最多的函数

3. Process Mode

现在一共有三个node节点

在parentnode和childnode的脚本里面都添加上面的输出hello和node的代码

parentnode里输出parentnode,childnode里输出childnode

先默认运行

先会输出parent再输出child,也就是节点的process的执行顺序

因为parent节点是在最上面的,采用深度优先遍历的规则,就会先执行parent的process函数,执行结束以后,再执行child的process函数

当游戏暂停的时候会发生什么呢

先把child脚本的ready函数删除,保留parent节点的ready函数

不对mode进行改变

运行场景

parent先输出,child后输出

processmode主要是控制process函数

就是控制process函数在暂停的时候,是否去执行

  1. 现在child设置成inherit,parent设置成disabled
    get_tree().paused = true
    ready函数里的这条语句的意思是
    这条代码执行过后,就会把游戏暂停掉

节点的三种可能状态有:

  1. Inherit(继承) :处理与否取决于父、祖父等等节点中第一个非 Inherit 状态的节点。

  2. disabled(停止) :无条件停止节点(以及 Inherit 模式的子节点)。暂停时该节点不会进行处理。

  3. always(处理) :无条件处理节点(以及 Inherit 模式的子节点)。无论暂停与否,该节点都会进行处理。

  4. parent选择disabled模式
    运行了ready里的停止游戏语句后
    不会运行process函数,控制台不会打印任何东西

选择always模式

控制台会继续先打印parent后打印child

  1. parent选择disabled,child选择always

    理论上只有子节点会输出日志

  2. parent选择always,child选择disabled

    这时只有父节点会输出日志

4. Process Priority

process函数执行的优先级,对于子节点依然有效

遍历的顺序可以通过process函数的优先级来改变

这个process priority

这个优先级是里面的数字越小,优先级越高

把parent的优先级调到100,child的优先级调成1

理论上是childnode先执行

对于同级节点依然生效

相关推荐
NEXT065 分钟前
CSS 选择器深度实战:从“个十百千”权重法到零 DOM 动画的降维打击
前端·css
Mapmost10 分钟前
防患未“燃”:掌握森林火灾仿真分析,精准把控火势蔓延趋势
前端
chen_mangoo10 分钟前
HDMI简介
android·linux·驱动开发·单片机·嵌入式硬件
半世轮回半世寻13 分钟前
前端开发里最常用的5种本地存储
前端·javascript
OpenTiny社区14 分钟前
TinyPro v1.4.0 正式发布:支持 Spring Boot、移动端适配、新增卡片列表和高级表单页面
java·前端·spring boot·后端·开源·opentiny
爱上妖精的尾巴18 分钟前
7-9 WPS JS宏 对象使用实例6:按条件读取多表再拆成多表
前端·javascript·wps·jsa
有意义19 分钟前
现代 React 路由实践指南
前端·vue.js·react.js
三木檾19 分钟前
Cookie 原理详解:Domain / Path / SameSite 一步错,生产环境直接翻车
前端·浏览器
开始学java19 分钟前
踩坑实录:把 useRef 写进 JSX 后,我终于分清它和 useState 的核心差异
前端
二DUAN帝19 分钟前
像素流与UE通信
前端·javascript·css·ue5·html·ue4·html5