Как обратиться к дочернему объекту и переместить его?

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By Dmitriy

Я создал объект Node, в него пометил 3 объекта. Мне надо их переместить на рандомные x z координаты в диапазоне от 0 до 10, и сделать это из скрипта объекта Node.

я новичок в Godot
так что может мой код и не шибко оптимальный)

┖╴Node2D (Script)
    ┠╴Image001
    ┠╴Image002
    ┖╴Image003

extends Node2D

func _ready():
	sprite_pos("Image001", randomize_position())
	sprite_pos("Image002", randomize_position())
	sprite_pos("Image003", randomize_position())
	
func sprite_pos(name,rand_pos):
	var getnode = get_node(name)
	getnode.position = rand_pos
	
func randomize_position():
	randomize()
	var x = rand_range(-100,100)
	var y = rand_range(-100,100)
	var vec = Vector2(x,y)
	return vec

gutalin | 2020-09-04 14:32

:bust_in_silhouette: Reply From: Wakatta

Настройка дерева узлов

┖╴SpatialNode (Script.gd)
    ┠╴Camera
    ┠╴Sphere (3D Spatial Node)
    ┠╴Cube (2D Node)
    ┖╴Cone

Поскольку вы сказали x z, я предполагаю, что вы имели в виду трехмерный пространственный узел

Script.gd

extends Spatial

func _ready():
	randomize() #генератор случайных чисел
	print_tree_pretty()

func _process(delta):
	var x = randi() % 10 + 1 #генерировать случайное число от 1 до 10
	var z = randi() % 10 + 1

	#перемещает 3D Node с именем Sphere
	$Sphere.global_transform.origin.x = x #Знак $ ссылается на дочерний узел
	$Sphere.global_transform.origin.z = z

	#перемещает 2D Node имена Cube
	$Cube.rect_position.x = x
	$Cube.rect_position.y = z

В будущем постарайтесь быть более конкретным, так как существует много типов Node, и простая фраза «Node» делает ваш вопрос расплывчатым и безответным.