Godot Engine:组(Group)和场景树(Tree)的几个要点

1. 组是由场景树维护的

这一点从获取组成员时要先获取场景树就可以看出

get_tree().get_nodes_in_group("group_name")
2. 节点离开场景树时会被移除所在组

我在场景添加了一个Node,并把它放到“UI”组中,然后反复将它从场景树中添加/移除

extends Node
func _ready():
	add_to_group("UI")
	print("ready!!!!")

func _enter_tree():
	print("entered tree")

func _exit_tree():
	print("exited tree")

func _process(delta):
	if Input.is_action_just_pressed("ui_left"):
		print("i am running!!!!!!!!!!!!!!!!!!!!!!")

在一个Manager中控制节点

var is_child = false

func _process(delta):
   if Input.is_action_just_pressed("ui_page_up"):
   	if is_child:
   		remove_child(node)
   		is_child = false
   	else:
   		add_child(node)
   		is_child = true
   
   if Input.is_action_just_pressed("ui_run"):
   	var list :=get_tree().get_nodes_in_group("UI")
   	print("Nodes in UI group:" + str(list.size()))
   	

添加到场景

entered tree
ready!!!!
Nodes in UI group:1

从场景移除

exited tree
Nodes in UI group:0

再次添加到场景

entered tree
Nodes in UI group:1

从上面的代码和结果可以看出:

  1. 节点从场景树remove_child以后会被移除所在组,所以没有必要_exit_tree中手动remove_from_group
  2. 再次将节点add_child以后以后会被再次添加到组,所以没有必要_enter_tree中手动add_to_group
  3. 顺便再次验证了《Node类:生命周期》_ready_enter_tree之后调用,并且只调用一次,而_enter_tree每次加入场景树都会调用
发布了261 篇原创文章 · 获赞 134 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/hello_tute/article/details/103834338