How do i see the global position of a node?

Godot Version

4.2

Question

Simple question. Is it possible to see the global position coordinates of a node inside the inspector? Thx!

1 Like

EDIT: My bad, I only noticed the 2D tag after I responded.

I am not 100% sure, because I work with 3D, but maybe Top Level under CanvasItem will make sure that the position is global? Again, not totally sure but I already responded and feel I should at least try :sweat_smile:


Below is for 3D

If you enable Top Level, the transform shown in the inspector will be Global Position

image

1 Like

doesn’t this also modify the node behaviour in some way? I would just like to read the global coordinates

It’s not shown in the inspector, you would have to print(global_position) or add a label for debugging

2 Likes

or make easy plug-in for that

Tutorial is for GDScript and C#

3 Likes

it would change the behavior, but depending on what you’re doing it might not matter. The other responses are good responses.

what do you mean by “adding a label”?

i dont know how to do that :frowning:

2024-07-11-132318_267x199_scrot

Just a Node type for displaying text, under a CanvasLayer might be better. Toss this script on it

extends Label

@export var target: Node2D

func _process(_delta: float) -> void:
    text = "%d, %d" % [target.position.x, target.position.y]
2 Likes

I did Plug-in Plugin .
in your project you needed extract zip.
folders should look like “res://addons/GlobalPosition2DGS”

in project Settings you go plugins and enable

now if editor inspector in all Nodes 2D next to local position you should have

:slight_smile:

if link in future will be down there code:

  • res://addons/GlobalPosition2DGS/global_position_control.gd
@tool
extends GridContainer
@export var _line_editX: LineEdit
@export var _line_editY: LineEdit
var object : Node2D

func _set_object(new_object : Node2D) -> void:
	object = new_object

func _ready() -> void:
	_line_editX.text_submitted.connect(_edit_x)
	_line_editY.text_submitted.connect(_edit_y)

func _process(delta: float) -> void:
	if(!_line_editX.has_focus()):
		_line_editX.text = str(object.global_position.x)
	if(!_line_editY.has_focus()):
		_line_editY.text = str(object.global_position.y)

func _edit_x(new_x : String) -> void:
	if(new_x.is_valid_float()):
		object.global_position = Vector2(new_x.to_float(),object.global_position.y)
		return
	_line_editX.text = str(object.global_position.x)
	

func  _edit_y(new_y : String) -> void:
	if(new_y.is_valid_float()):
		object.global_position = Vector2(object.global_position.y,new_y.to_float())
		return
	_line_editY.text = str(object.global_position.y)
	
  • res://addons/GlobalPosition2DGS/global_position_inspector_plugin.gd
@tool
extends EditorInspectorPlugin

func _can_handle(object: Object) -> bool:
	if(object is Node2D):
		return true
	return false

func _parse_property(object: Object, type: Variant.Type, name: String, hint_type: PropertyHint, hint_string: String, usage_flags: int, wide: bool) -> bool:
	if(name == "position"):
		var _custon_control := preload("res://addons/GlobalPosition2DGS/GlobalPosition.tscn").instantiate()
		add_custom_control(_custon_control)
		if(_custon_control.has_method("_set_object")):
			_custon_control._set_object(object)
	
	return false


  • res://addons/GlobalPosition2DGS/global_position_plugin_2d.gd
@tool
extends EditorPlugin

var plugin

func _enter_tree() -> void:
	plugin = preload("res://addons/GlobalPosition2DGS/global_position_inspector_plugin.gd").new()
	add_inspector_plugin(plugin)
func  _exit_tree() -> void:
	remove_inspector_plugin(plugin)

  • res://addons/GlobalPosition2DGS/plugin.cfg
[plugin]

name="GlobalPosition2D with GDScript"
description="This plugin adds the global position to the inspector for all Node2D nodes."
author="Moreus"
version="0.1"
script="global_position_plugin_2d.gd"

obraz

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.