:github_url: hide .. meta:: :keywords: spatial .. DO NOT EDIT THIS FILE!!! .. Generated automatically from Godot engine sources. .. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py. .. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/Node3D.xml. .. _class_Node3D: Node3D ====== **Inherits:** :ref:`Node` **<** :ref:`Object` **Inherited By:** :ref:`AudioListener3D`, :ref:`AudioStreamPlayer3D`, :ref:`BoneAttachment3D`, :ref:`Camera3D`, :ref:`CollisionObject3D`, :ref:`CollisionPolygon3D`, :ref:`CollisionShape3D`, :ref:`GridMap`, :ref:`ImporterMeshInstance3D`, :ref:`Joint3D`, :ref:`LightmapProbe`, :ref:`Marker3D`, :ref:`NavigationLink3D`, :ref:`NavigationObstacle3D`, :ref:`NavigationRegion3D`, :ref:`OpenXRCompositionLayer`, :ref:`OpenXRHand`, :ref:`OpenXRRenderModel`, :ref:`OpenXRRenderModelManager`, :ref:`Path3D`, :ref:`PathFollow3D`, :ref:`RayCast3D`, :ref:`RemoteTransform3D`, :ref:`ShapeCast3D`, :ref:`Skeleton3D`, :ref:`SkeletonModifier3D`, :ref:`SpringArm3D`, :ref:`SpringBoneCollision3D`, :ref:`VehicleWheel3D`, :ref:`VisualInstance3D`, :ref:`XRFaceModifier3D`, :ref:`XRNode3D`, :ref:`XROrigin3D` Base object in 3D space, inherited by all 3D nodes. .. rst-class:: classref-introduction-group Description ----------- The **Node3D** node is the base representation of a node in 3D space. All other 3D nodes inherit from this class. Affine operations (translation, rotation, scale) are calculated in the coordinate system relative to the parent, unless the **Node3D**'s :ref:`top_level` is ``true``. In this coordinate system, affine operations correspond to direct affine operations on the **Node3D**'s :ref:`transform`. The term *parent space* refers to this coordinate system. The coordinate system that is attached to the **Node3D** itself is referred to as object-local coordinate system, or *local space*. \ **Note:** Unless otherwise specified, all methods that need angle parameters must receive angles in *radians*. To convert degrees to radians, use :ref:`@GlobalScope.deg_to_rad()`. \ **Note:** In Godot 3 and older, **Node3D** was named *Spatial*. .. rst-class:: classref-introduction-group Tutorials --------- - :doc:`Introduction to 3D <../tutorials/3d/introduction_to_3d>` - `All 3D Demos `__ .. rst-class:: classref-reftable-group Properties ---------- .. table:: :widths: auto +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Basis` | :ref:`basis` | | +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Basis` | :ref:`global_basis` | | +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Vector3` | :ref:`global_position` | | +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Vector3` | :ref:`global_rotation` | | +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Vector3` | :ref:`global_rotation_degrees` | | +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Transform3D` | :ref:`global_transform` | | +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Vector3` | :ref:`position` | ``Vector3(0, 0, 0)`` | +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Quaternion` | :ref:`quaternion` | | +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Vector3` | :ref:`rotation` | ``Vector3(0, 0, 0)`` | +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Vector3` | :ref:`rotation_degrees` | | +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`RotationEditMode` | :ref:`rotation_edit_mode` | ``0`` | +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`EulerOrder` | :ref:`rotation_order` | ``2`` | +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Vector3` | :ref:`scale` | ``Vector3(1, 1, 1)`` | +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`bool` | :ref:`top_level` | ``false`` | +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Transform3D` | :ref:`transform` | ``Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)`` | +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`NodePath` | :ref:`visibility_parent` | ``NodePath("")`` | +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`bool` | :ref:`visible` | ``true`` | +-------------------------------------------------------+-------------------------------------------------------------------------------+-----------------------------------------------------+ .. rst-class:: classref-reftable-group Methods ------- .. table:: :widths: auto +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`add_gizmo`\ (\ gizmo\: :ref:`Node3DGizmo`\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`clear_gizmos`\ (\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`clear_subgizmo_selection`\ (\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`force_update_transform`\ (\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array`\[:ref:`Node3DGizmo`\] | :ref:`get_gizmos`\ (\ ) |const| | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Transform3D` | :ref:`get_global_transform_interpolated`\ (\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Node3D` | :ref:`get_parent_node_3d`\ (\ ) |const| | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`World3D` | :ref:`get_world_3d`\ (\ ) |const| | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`global_rotate`\ (\ axis\: :ref:`Vector3`, angle\: :ref:`float`\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`global_scale`\ (\ scale\: :ref:`Vector3`\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`global_translate`\ (\ offset\: :ref:`Vector3`\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`hide`\ (\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_local_transform_notification_enabled`\ (\ ) |const| | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_scale_disabled`\ (\ ) |const| | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_transform_notification_enabled`\ (\ ) |const| | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_visible_in_tree`\ (\ ) |const| | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`look_at`\ (\ target\: :ref:`Vector3`, up\: :ref:`Vector3` = Vector3(0, 1, 0), use_model_front\: :ref:`bool` = false\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`look_at_from_position`\ (\ position\: :ref:`Vector3`, target\: :ref:`Vector3`, up\: :ref:`Vector3` = Vector3(0, 1, 0), use_model_front\: :ref:`bool` = false\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`orthonormalize`\ (\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`rotate`\ (\ axis\: :ref:`Vector3`, angle\: :ref:`float`\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`rotate_object_local`\ (\ axis\: :ref:`Vector3`, angle\: :ref:`float`\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`rotate_x`\ (\ angle\: :ref:`float`\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`rotate_y`\ (\ angle\: :ref:`float`\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`rotate_z`\ (\ angle\: :ref:`float`\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`scale_object_local`\ (\ scale\: :ref:`Vector3`\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`set_disable_scale`\ (\ disable\: :ref:`bool`\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`set_identity`\ (\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`set_ignore_transform_notification`\ (\ enabled\: :ref:`bool`\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`set_notify_local_transform`\ (\ enable\: :ref:`bool`\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`set_notify_transform`\ (\ enable\: :ref:`bool`\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`set_subgizmo_selection`\ (\ gizmo\: :ref:`Node3DGizmo`, id\: :ref:`int`, transform\: :ref:`Transform3D`\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`show`\ (\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Vector3` | :ref:`to_global`\ (\ local_point\: :ref:`Vector3`\ ) |const| | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Vector3` | :ref:`to_local`\ (\ global_point\: :ref:`Vector3`\ ) |const| | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`translate`\ (\ offset\: :ref:`Vector3`\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`translate_object_local`\ (\ offset\: :ref:`Vector3`\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`update_gizmos`\ (\ ) | +--------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Signals ------- .. _class_Node3D_signal_visibility_changed: .. rst-class:: classref-signal **visibility_changed**\ (\ ) :ref:`🔗` Emitted when this node's visibility changes (see :ref:`visible` and :ref:`is_visible_in_tree()`). This signal is emitted *after* the related :ref:`NOTIFICATION_VISIBILITY_CHANGED` notification. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Enumerations ------------ .. _enum_Node3D_RotationEditMode: .. rst-class:: classref-enumeration enum **RotationEditMode**: :ref:`🔗` .. _class_Node3D_constant_ROTATION_EDIT_MODE_EULER: .. rst-class:: classref-enumeration-constant :ref:`RotationEditMode` **ROTATION_EDIT_MODE_EULER** = ``0`` The rotation is edited using a :ref:`Vector3` in `Euler angles `__. .. _class_Node3D_constant_ROTATION_EDIT_MODE_QUATERNION: .. rst-class:: classref-enumeration-constant :ref:`RotationEditMode` **ROTATION_EDIT_MODE_QUATERNION** = ``1`` The rotation is edited using a :ref:`Quaternion`. .. _class_Node3D_constant_ROTATION_EDIT_MODE_BASIS: .. rst-class:: classref-enumeration-constant :ref:`RotationEditMode` **ROTATION_EDIT_MODE_BASIS** = ``2`` The rotation is edited using a :ref:`Basis`. In this mode, the raw :ref:`basis`'s axes can be freely modified, but the :ref:`scale` property is not available. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Constants --------- .. _class_Node3D_constant_NOTIFICATION_TRANSFORM_CHANGED: .. rst-class:: classref-constant **NOTIFICATION_TRANSFORM_CHANGED** = ``2000`` :ref:`🔗` Notification received when this node's :ref:`global_transform` changes, if :ref:`is_transform_notification_enabled()` is ``true``. See also :ref:`set_notify_transform()`. \ **Note:** Most 3D nodes such as :ref:`VisualInstance3D` or :ref:`CollisionObject3D` automatically enable this to function correctly. \ **Note:** In the editor, nodes will propagate this notification to their children if a gizmo is attached (see :ref:`add_gizmo()`). .. _class_Node3D_constant_NOTIFICATION_ENTER_WORLD: .. rst-class:: classref-constant **NOTIFICATION_ENTER_WORLD** = ``41`` :ref:`🔗` Notification received when this node is registered to a new :ref:`World3D` (see :ref:`get_world_3d()`). .. _class_Node3D_constant_NOTIFICATION_EXIT_WORLD: .. rst-class:: classref-constant **NOTIFICATION_EXIT_WORLD** = ``42`` :ref:`🔗` Notification received when this node is unregistered from the current :ref:`World3D` (see :ref:`get_world_3d()`). .. _class_Node3D_constant_NOTIFICATION_VISIBILITY_CHANGED: .. rst-class:: classref-constant **NOTIFICATION_VISIBILITY_CHANGED** = ``43`` :ref:`🔗` Notification received when this node's visibility changes (see :ref:`visible` and :ref:`is_visible_in_tree()`). This notification is received *before* the related :ref:`visibility_changed` signal. .. _class_Node3D_constant_NOTIFICATION_LOCAL_TRANSFORM_CHANGED: .. rst-class:: classref-constant **NOTIFICATION_LOCAL_TRANSFORM_CHANGED** = ``44`` :ref:`🔗` Notification received when this node's :ref:`transform` changes, if :ref:`is_local_transform_notification_enabled()` is ``true``. This is not received when a parent **Node3D**'s :ref:`transform` changes. See also :ref:`set_notify_local_transform()`. \ **Note:** Some 3D nodes such as :ref:`CSGShape3D` or :ref:`CollisionShape3D` automatically enable this to function correctly. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Property Descriptions --------------------- .. _class_Node3D_property_basis: .. rst-class:: classref-property :ref:`Basis` **basis** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_basis**\ (\ value\: :ref:`Basis`\ ) - :ref:`Basis` **get_basis**\ (\ ) Basis of the :ref:`transform` property. Represents the rotation, scale, and shear of this node in parent space (relative to the parent node). .. rst-class:: classref-item-separator ---- .. _class_Node3D_property_global_basis: .. rst-class:: classref-property :ref:`Basis` **global_basis** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_global_basis**\ (\ value\: :ref:`Basis`\ ) - :ref:`Basis` **get_global_basis**\ (\ ) Basis of the :ref:`global_transform` property. Represents the rotation, scale, and shear of this node in global space (relative to the world). \ **Note:** If the node is not inside the tree, getting this property fails and returns :ref:`Basis.IDENTITY`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_property_global_position: .. rst-class:: classref-property :ref:`Vector3` **global_position** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_global_position**\ (\ value\: :ref:`Vector3`\ ) - :ref:`Vector3` **get_global_position**\ (\ ) Global position (translation) of this node in global space (relative to the world). This is equivalent to the :ref:`global_transform`'s :ref:`Transform3D.origin`. \ **Note:** If the node is not inside the tree, getting this property fails and returns :ref:`Vector3.ZERO`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_property_global_rotation: .. rst-class:: classref-property :ref:`Vector3` **global_rotation** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_global_rotation**\ (\ value\: :ref:`Vector3`\ ) - :ref:`Vector3` **get_global_rotation**\ (\ ) Global rotation of this node as `Euler angles `__, in radians and in global space (relative to the world). This value is obtained from :ref:`global_basis`'s rotation. - The :ref:`Vector3.x` is the angle around the global X axis (pitch); - The :ref:`Vector3.y` is the angle around the global Y axis (yaw); - The :ref:`Vector3.z` is the angle around the global Z axis (roll). \ **Note:** Unlike :ref:`rotation`, this property always follows the YXZ convention (:ref:`@GlobalScope.EULER_ORDER_YXZ`). \ **Note:** If the node is not inside the tree, getting this property fails and returns :ref:`Vector3.ZERO`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_property_global_rotation_degrees: .. rst-class:: classref-property :ref:`Vector3` **global_rotation_degrees** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_global_rotation_degrees**\ (\ value\: :ref:`Vector3`\ ) - :ref:`Vector3` **get_global_rotation_degrees**\ (\ ) The :ref:`global_rotation` of this node, in degrees instead of radians. \ **Note:** If the node is not inside the tree, getting this property fails and returns :ref:`Vector3.ZERO`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_property_global_transform: .. rst-class:: classref-property :ref:`Transform3D` **global_transform** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_global_transform**\ (\ value\: :ref:`Transform3D`\ ) - :ref:`Transform3D` **get_global_transform**\ (\ ) The transformation of this node, in global space (relative to the world). Contains and represents this node's :ref:`global_position`, :ref:`global_rotation`, and global scale. \ **Note:** If the node is not inside the tree, getting this property fails and returns :ref:`Transform3D.IDENTITY`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_property_position: .. rst-class:: classref-property :ref:`Vector3` **position** = ``Vector3(0, 0, 0)`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_position**\ (\ value\: :ref:`Vector3`\ ) - :ref:`Vector3` **get_position**\ (\ ) Position (translation) of this node in parent space (relative to the parent node). This is equivalent to the :ref:`transform`'s :ref:`Transform3D.origin`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_property_quaternion: .. rst-class:: classref-property :ref:`Quaternion` **quaternion** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_quaternion**\ (\ value\: :ref:`Quaternion`\ ) - :ref:`Quaternion` **get_quaternion**\ (\ ) Rotation of this node represented as a :ref:`Quaternion` in parent space (relative to the parent node). This value is obtained from :ref:`basis`'s rotation. \ **Note:** Quaternions are much more suitable for 3D math but are less intuitive. Setting this property can be useful for interpolation (see :ref:`Quaternion.slerp()`). .. rst-class:: classref-item-separator ---- .. _class_Node3D_property_rotation: .. rst-class:: classref-property :ref:`Vector3` **rotation** = ``Vector3(0, 0, 0)`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_rotation**\ (\ value\: :ref:`Vector3`\ ) - :ref:`Vector3` **get_rotation**\ (\ ) Rotation of this node as `Euler angles `__, in radians and in parent space (relative to the parent node). This value is obtained from :ref:`basis`'s rotation. - The :ref:`Vector3.x` is the angle around the local X axis (pitch); - The :ref:`Vector3.y` is the angle around the local Y axis (yaw); - The :ref:`Vector3.z` is the angle around the local Z axis (roll). The order of each consecutive rotation can be changed with :ref:`rotation_order` (see :ref:`EulerOrder` constants). By default, the YXZ convention is used (:ref:`@GlobalScope.EULER_ORDER_YXZ`). \ **Note:** This property is edited in degrees in the inspector. If you want to use degrees in a script, use :ref:`rotation_degrees`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_property_rotation_degrees: .. rst-class:: classref-property :ref:`Vector3` **rotation_degrees** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_rotation_degrees**\ (\ value\: :ref:`Vector3`\ ) - :ref:`Vector3` **get_rotation_degrees**\ (\ ) The :ref:`rotation` of this node, in degrees instead of radians. \ **Note:** This is **not** the property available in the Inspector dock. .. rst-class:: classref-item-separator ---- .. _class_Node3D_property_rotation_edit_mode: .. rst-class:: classref-property :ref:`RotationEditMode` **rotation_edit_mode** = ``0`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_rotation_edit_mode**\ (\ value\: :ref:`RotationEditMode`\ ) - :ref:`RotationEditMode` **get_rotation_edit_mode**\ (\ ) How this node's rotation and scale are displayed in the Inspector dock. .. rst-class:: classref-item-separator ---- .. _class_Node3D_property_rotation_order: .. rst-class:: classref-property :ref:`EulerOrder` **rotation_order** = ``2`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_rotation_order**\ (\ value\: :ref:`EulerOrder`\ ) - :ref:`EulerOrder` **get_rotation_order**\ (\ ) The axis rotation order of the :ref:`rotation` property. The final orientation is calculated by rotating around the local X, Y, and Z axis in this order. .. rst-class:: classref-item-separator ---- .. _class_Node3D_property_scale: .. rst-class:: classref-property :ref:`Vector3` **scale** = ``Vector3(1, 1, 1)`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_scale**\ (\ value\: :ref:`Vector3`\ ) - :ref:`Vector3` **get_scale**\ (\ ) Scale of this node in local space (relative to this node). This value is obtained from :ref:`basis`'s scale. \ **Note:** The behavior of some 3D node types is not affected by this property. These include :ref:`Light3D`, :ref:`Camera3D`, :ref:`AudioStreamPlayer3D`, and more. \ **Warning:** The scale's components must either be all positive or all negative, and **not** exactly ``0.0``. Otherwise, it won't be possible to obtain the scale from the :ref:`basis`. This may cause the intended scale to be lost when reloaded from disk, and potentially other unstable behavior. .. rst-class:: classref-item-separator ---- .. _class_Node3D_property_top_level: .. rst-class:: classref-property :ref:`bool` **top_level** = ``false`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_as_top_level**\ (\ value\: :ref:`bool`\ ) - :ref:`bool` **is_set_as_top_level**\ (\ ) If ``true``, the node does not inherit its transformations from its parent. As such, node transformations will only be in global space, which also means that :ref:`global_transform` and :ref:`transform` will be identical. .. rst-class:: classref-item-separator ---- .. _class_Node3D_property_transform: .. rst-class:: classref-property :ref:`Transform3D` **transform** = ``Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_transform**\ (\ value\: :ref:`Transform3D`\ ) - :ref:`Transform3D` **get_transform**\ (\ ) The local transformation of this node, in parent space (relative to the parent node). Contains and represents this node's :ref:`position`, :ref:`rotation`, and :ref:`scale`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_property_visibility_parent: .. rst-class:: classref-property :ref:`NodePath` **visibility_parent** = ``NodePath("")`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_visibility_parent**\ (\ value\: :ref:`NodePath`\ ) - :ref:`NodePath` **get_visibility_parent**\ (\ ) Path to the visibility range parent for this node and its descendants. The visibility parent must be a :ref:`GeometryInstance3D`. Any visual instance will only be visible if the visibility parent (and all of its visibility ancestors) is hidden by being closer to the camera than its own :ref:`GeometryInstance3D.visibility_range_begin`. Nodes hidden via the :ref:`visible` property are essentially removed from the visibility dependency tree, so dependent instances will not take the hidden node or its descendants into account. .. rst-class:: classref-item-separator ---- .. _class_Node3D_property_visible: .. rst-class:: classref-property :ref:`bool` **visible** = ``true`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_visible**\ (\ value\: :ref:`bool`\ ) - :ref:`bool` **is_visible**\ (\ ) If ``true``, this node can be visible. The node is only rendered when all of its ancestors are visible, as well. That means :ref:`is_visible_in_tree()` must return ``true``. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Method Descriptions ------------------- .. _class_Node3D_method_add_gizmo: .. rst-class:: classref-method |void| **add_gizmo**\ (\ gizmo\: :ref:`Node3DGizmo`\ ) :ref:`🔗` Attaches the given ``gizmo`` to this node. Only works in the editor. \ **Note:** ``gizmo`` should be an :ref:`EditorNode3DGizmo`. The argument type is :ref:`Node3DGizmo` to avoid depending on editor classes in **Node3D**. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_clear_gizmos: .. rst-class:: classref-method |void| **clear_gizmos**\ (\ ) :ref:`🔗` Clears all :ref:`EditorNode3DGizmo` objects attached to this node. Only works in the editor. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_clear_subgizmo_selection: .. rst-class:: classref-method |void| **clear_subgizmo_selection**\ (\ ) :ref:`🔗` Deselects all subgizmos for this node. Useful to call when the selected subgizmo may no longer exist after a property change. Only works in the editor. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_force_update_transform: .. rst-class:: classref-method |void| **force_update_transform**\ (\ ) :ref:`🔗` Forces the node's :ref:`global_transform` to update, by sending :ref:`NOTIFICATION_TRANSFORM_CHANGED`. Fails if the node is not inside the tree. \ **Note:** For performance reasons, transform changes are usually accumulated and applied *once* at the end of the frame. The update propagates through **Node3D** children, as well. Therefore, use this method only when you need an up-to-date transform (such as during physics operations). .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_get_gizmos: .. rst-class:: classref-method :ref:`Array`\[:ref:`Node3DGizmo`\] **get_gizmos**\ (\ ) |const| :ref:`🔗` Returns all the :ref:`EditorNode3DGizmo` objects attached to this node. Only works in the editor. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_get_global_transform_interpolated: .. rst-class:: classref-method :ref:`Transform3D` **get_global_transform_interpolated**\ (\ ) :ref:`🔗` When using physics interpolation, there will be circumstances in which you want to know the interpolated (displayed) transform of a node rather than the standard transform (which may only be accurate to the most recent physics tick). This is particularly important for frame-based operations that take place in :ref:`Node._process()`, rather than :ref:`Node._physics_process()`. Examples include :ref:`Camera3D`\ s focusing on a node, or finding where to fire lasers from on a frame rather than physics tick. \ **Note:** This function creates an interpolation pump on the **Node3D** the first time it is called, which can respond to physics interpolation resets. If you get problems with "streaking" when initially following a **Node3D**, be sure to call :ref:`get_global_transform_interpolated()` at least once *before* resetting the **Node3D** physics interpolation. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_get_parent_node_3d: .. rst-class:: classref-method :ref:`Node3D` **get_parent_node_3d**\ (\ ) |const| :ref:`🔗` Returns the parent **Node3D** that directly affects this node's :ref:`global_transform`. Returns ``null`` if no parent exists, the parent is not a **Node3D**, or :ref:`top_level` is ``true``. \ **Note:** This method is not always equivalent to :ref:`Node.get_parent()`, which does not take :ref:`top_level` into account. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_get_world_3d: .. rst-class:: classref-method :ref:`World3D` **get_world_3d**\ (\ ) |const| :ref:`🔗` Returns the :ref:`World3D` this node is registered to. Usually, this is the same as the world used by this node's viewport (see :ref:`Node.get_viewport()` and :ref:`Viewport.find_world_3d()`). .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_global_rotate: .. rst-class:: classref-method |void| **global_rotate**\ (\ axis\: :ref:`Vector3`, angle\: :ref:`float`\ ) :ref:`🔗` Rotates this node's :ref:`global_basis` around the global ``axis`` by the given ``angle``, in radians. This operation is calculated in global space (relative to the world) and preserves the :ref:`global_position`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_global_scale: .. rst-class:: classref-method |void| **global_scale**\ (\ scale\: :ref:`Vector3`\ ) :ref:`🔗` Scales this node's :ref:`global_basis` by the given ``scale`` factor. This operation is calculated in global space (relative to the world) and preserves the :ref:`global_position`. \ **Note:** This method is not to be confused with the :ref:`scale` property. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_global_translate: .. rst-class:: classref-method |void| **global_translate**\ (\ offset\: :ref:`Vector3`\ ) :ref:`🔗` Adds the given translation ``offset`` to the node's :ref:`global_position` in global space (relative to the world). .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_hide: .. rst-class:: classref-method |void| **hide**\ (\ ) :ref:`🔗` Prevents this node from being rendered. Equivalent to setting :ref:`visible` to ``false``. This is the opposite of :ref:`show()`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_is_local_transform_notification_enabled: .. rst-class:: classref-method :ref:`bool` **is_local_transform_notification_enabled**\ (\ ) |const| :ref:`🔗` Returns ``true`` if the node receives :ref:`NOTIFICATION_LOCAL_TRANSFORM_CHANGED` whenever :ref:`transform` changes. This is enabled with :ref:`set_notify_local_transform()`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_is_scale_disabled: .. rst-class:: classref-method :ref:`bool` **is_scale_disabled**\ (\ ) |const| :ref:`🔗` Returns ``true`` if this node's :ref:`global_transform` is automatically orthonormalized. This results in this node not appearing distorted, as if its global scale were set to :ref:`Vector3.ONE` (or its negative counterpart). See also :ref:`set_disable_scale()` and :ref:`orthonormalize()`. \ **Note:** :ref:`transform` is not affected by this setting. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_is_transform_notification_enabled: .. rst-class:: classref-method :ref:`bool` **is_transform_notification_enabled**\ (\ ) |const| :ref:`🔗` Returns ``true`` if the node receives :ref:`NOTIFICATION_TRANSFORM_CHANGED` whenever :ref:`global_transform` changes. This is enabled with :ref:`set_notify_transform()`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_is_visible_in_tree: .. rst-class:: classref-method :ref:`bool` **is_visible_in_tree**\ (\ ) |const| :ref:`🔗` Returns ``true`` if this node is inside the scene tree and the :ref:`visible` property is ``true`` for this node and all of its **Node3D** ancestors *in sequence*. An ancestor of any other type (such as :ref:`Node` or :ref:`Node2D`) breaks the sequence. See also :ref:`Node.get_parent()`. \ **Note:** This method cannot take :ref:`VisualInstance3D.layers` into account, so even if this method returns ``true``, the node may not be rendered. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_look_at: .. rst-class:: classref-method |void| **look_at**\ (\ target\: :ref:`Vector3`, up\: :ref:`Vector3` = Vector3(0, 1, 0), use_model_front\: :ref:`bool` = false\ ) :ref:`🔗` Rotates the node so that the local forward axis (-Z, :ref:`Vector3.FORWARD`) points toward the ``target`` position. This operation is calculated in global space (relative to the world). The local up axis (+Y) points as close to the ``up`` vector as possible while staying perpendicular to the local forward axis. The resulting transform is orthogonal, and the scale is preserved. Non-uniform scaling may not work correctly. The ``target`` position cannot be the same as the node's position, the ``up`` vector cannot be :ref:`Vector3.ZERO`. Furthermore, the direction from the node's position to the ``target`` position cannot be parallel to the ``up`` vector, to avoid an unintended rotation around the local Z axis. If ``use_model_front`` is ``true``, the +Z axis (asset front) is treated as forward (implies +X is left) and points toward the ``target`` position. By default, the -Z axis (camera forward) is treated as forward (implies +X is right). \ **Note:** This method fails if the node is not in the scene tree. If necessary, use :ref:`look_at_from_position()` instead. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_look_at_from_position: .. rst-class:: classref-method |void| **look_at_from_position**\ (\ position\: :ref:`Vector3`, target\: :ref:`Vector3`, up\: :ref:`Vector3` = Vector3(0, 1, 0), use_model_front\: :ref:`bool` = false\ ) :ref:`🔗` Moves the node to the specified ``position``, then rotates the node to point toward the ``target`` position, similar to :ref:`look_at()`. This operation is calculated in global space (relative to the world). .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_orthonormalize: .. rst-class:: classref-method |void| **orthonormalize**\ (\ ) :ref:`🔗` Orthonormalizes this node's :ref:`basis`. This method sets this node's :ref:`scale` to :ref:`Vector3.ONE` (or its negative counterpart), but preserves the :ref:`position` and :ref:`rotation`. See also :ref:`Transform3D.orthonormalized()`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_rotate: .. rst-class:: classref-method |void| **rotate**\ (\ axis\: :ref:`Vector3`, angle\: :ref:`float`\ ) :ref:`🔗` Rotates this node's :ref:`basis` around the ``axis`` by the given ``angle``, in radians. This operation is calculated in parent space (relative to the parent) and preserves the :ref:`position`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_rotate_object_local: .. rst-class:: classref-method |void| **rotate_object_local**\ (\ axis\: :ref:`Vector3`, angle\: :ref:`float`\ ) :ref:`🔗` Rotates this node's :ref:`basis` around the ``axis`` by the given ``angle``, in radians. This operation is calculated in local space (relative to this node) and preserves the :ref:`position`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_rotate_x: .. rst-class:: classref-method |void| **rotate_x**\ (\ angle\: :ref:`float`\ ) :ref:`🔗` Rotates this node's :ref:`basis` around the X axis by the given ``angle``, in radians. This operation is calculated in parent space (relative to the parent) and preserves the :ref:`position`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_rotate_y: .. rst-class:: classref-method |void| **rotate_y**\ (\ angle\: :ref:`float`\ ) :ref:`🔗` Rotates this node's :ref:`basis` around the Y axis by the given ``angle``, in radians. This operation is calculated in parent space (relative to the parent) and preserves the :ref:`position`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_rotate_z: .. rst-class:: classref-method |void| **rotate_z**\ (\ angle\: :ref:`float`\ ) :ref:`🔗` Rotates this node's :ref:`basis` around the Z axis by the given ``angle``, in radians. This operation is calculated in parent space (relative to the parent) and preserves the :ref:`position`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_scale_object_local: .. rst-class:: classref-method |void| **scale_object_local**\ (\ scale\: :ref:`Vector3`\ ) :ref:`🔗` Scales this node's :ref:`basis` by the given ``scale`` factor. This operation is calculated in local space (relative to this node) and preserves the :ref:`position`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_set_disable_scale: .. rst-class:: classref-method |void| **set_disable_scale**\ (\ disable\: :ref:`bool`\ ) :ref:`🔗` If ``true``, this node's :ref:`global_transform` is automatically orthonormalized. This results in this node not appearing distorted, as if its global scale were set to :ref:`Vector3.ONE` (or its negative counterpart). See also :ref:`is_scale_disabled()` and :ref:`orthonormalize()`. \ **Note:** :ref:`transform` is not affected by this setting. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_set_identity: .. rst-class:: classref-method |void| **set_identity**\ (\ ) :ref:`🔗` Sets this node's :ref:`transform` to :ref:`Transform3D.IDENTITY`, which resets all transformations in parent space (:ref:`position`, :ref:`rotation`, and :ref:`scale`). .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_set_ignore_transform_notification: .. rst-class:: classref-method |void| **set_ignore_transform_notification**\ (\ enabled\: :ref:`bool`\ ) :ref:`🔗` If ``true``, the node will not receive :ref:`NOTIFICATION_TRANSFORM_CHANGED` or :ref:`NOTIFICATION_LOCAL_TRANSFORM_CHANGED`. It may useful to call this method when handling these notifications to prevent infinite recursion. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_set_notify_local_transform: .. rst-class:: classref-method |void| **set_notify_local_transform**\ (\ enable\: :ref:`bool`\ ) :ref:`🔗` If ``true``, the node will receive :ref:`NOTIFICATION_LOCAL_TRANSFORM_CHANGED` whenever :ref:`transform` changes. \ **Note:** Some 3D nodes such as :ref:`CSGShape3D` or :ref:`CollisionShape3D` automatically enable this to function correctly. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_set_notify_transform: .. rst-class:: classref-method |void| **set_notify_transform**\ (\ enable\: :ref:`bool`\ ) :ref:`🔗` If ``true``, the node will receive :ref:`NOTIFICATION_TRANSFORM_CHANGED` whenever :ref:`global_transform` changes. \ **Note:** Most 3D nodes such as :ref:`VisualInstance3D` or :ref:`CollisionObject3D` automatically enable this to function correctly. \ **Note:** In the editor, nodes will propagate this notification to their children if a gizmo is attached (see :ref:`add_gizmo()`). .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_set_subgizmo_selection: .. rst-class:: classref-method |void| **set_subgizmo_selection**\ (\ gizmo\: :ref:`Node3DGizmo`, id\: :ref:`int`, transform\: :ref:`Transform3D`\ ) :ref:`🔗` Selects the ``gizmo``'s subgizmo with the given ``id`` and sets its transform. Only works in the editor. \ **Note:** The gizmo object would typically be an instance of :ref:`EditorNode3DGizmo`, but the argument type is kept generic to avoid creating a dependency on editor classes in **Node3D**. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_show: .. rst-class:: classref-method |void| **show**\ (\ ) :ref:`🔗` Allows this node to be rendered. Equivalent to setting :ref:`visible` to ``true``. This is the opposite of :ref:`hide()`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_to_global: .. rst-class:: classref-method :ref:`Vector3` **to_global**\ (\ local_point\: :ref:`Vector3`\ ) |const| :ref:`🔗` Returns the ``local_point`` converted from this node's local space to global space. This is the opposite of :ref:`to_local()`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_to_local: .. rst-class:: classref-method :ref:`Vector3` **to_local**\ (\ global_point\: :ref:`Vector3`\ ) |const| :ref:`🔗` Returns the ``global_point`` converted from global space to this node's local space. This is the opposite of :ref:`to_global()`. .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_translate: .. rst-class:: classref-method |void| **translate**\ (\ offset\: :ref:`Vector3`\ ) :ref:`🔗` Adds the given translation ``offset`` to the node's position, in local space (relative to this node). \ **Note:** Prefer using :ref:`translate_object_local()`, instead, as this method may be changed in a future release. \ **Note:** Despite the naming convention, this operation is **not** calculated in parent space for compatibility reasons. To translate in parent space, add ``offset`` to the :ref:`position` (``node_3d.position += offset``). .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_translate_object_local: .. rst-class:: classref-method |void| **translate_object_local**\ (\ offset\: :ref:`Vector3`\ ) :ref:`🔗` Adds the given translation ``offset`` to the node's position, in local space (relative to this node). .. rst-class:: classref-item-separator ---- .. _class_Node3D_method_update_gizmos: .. rst-class:: classref-method |void| **update_gizmos**\ (\ ) :ref:`🔗` Updates all the :ref:`EditorNode3DGizmo` objects attached to this node. Only works in the editor. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)` .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)` .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)` .. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)` .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)` .. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)` .. |bitfield| replace:: :abbr:`BitField (This value is an integer composed as a bitmask of the following flags.)` .. |void| replace:: :abbr:`void (No return value.)`