:github_url: hide .. Generated automatically by doc/tools/makerst.py in Godot's source tree. .. DO NOT EDIT THIS FILE, but the Spatial.xml source instead. .. The source is found in doc/classes or modules//doc_classes. .. _class_Spatial: Spatial ======= **Inherits:** :ref:`Node` **<** :ref:`Object` **Inherited By:** :ref:`ARVRAnchor`, :ref:`ARVRController`, :ref:`ARVROrigin`, :ref:`AudioStreamPlayer3D`, :ref:`BoneAttachment`, :ref:`Camera`, :ref:`CollisionObject`, :ref:`CollisionPolygon`, :ref:`CollisionShape`, :ref:`GridMap`, :ref:`Joint`, :ref:`Listener`, :ref:`Navigation`, :ref:`NavigationMeshInstance`, :ref:`Path`, :ref:`PathFollow`, :ref:`Position3D`, :ref:`ProximityGroup`, :ref:`RayCast`, :ref:`RemoteTransform`, :ref:`Skeleton`, :ref:`SpringArm`, :ref:`VehicleWheel`, :ref:`VisibilityNotifier`, :ref:`VisualInstance` Most basic 3D game object, parent of all 3D-related nodes. Description ----------- Most basic 3D game object, with a 3D :ref:`Transform` and visibility settings. All other 3D game objects inherit from Spatial. Use ``Spatial`` as a parent node to move, scale, rotate and show/hide children in a 3D project. Affine operations (rotate, scale, translate) happen in parent's local coordinate system, unless the ``Spatial`` object is set as top-level. Affine operations in this coordinate system correspond to direct affine operations on the ``Spatial``'s transform. The word local below refers to this coordinate system. The coordinate system that is attached to the ``Spatial`` object itself is referred to as object-local coordinate system. **Note:** Unless otherwise specified, all methods that have angle parameters must have angles specified as *radians*. To convert degrees to radians, use :ref:`@GDScript.deg2rad`. Tutorials --------- - :doc:`../tutorials/3d/introduction_to_3d` - `All 3D Demos `_ Properties ---------- +-----------------------------------------+------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`SpatialGizmo` | :ref:`gizmo` | | +-----------------------------------------+------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Transform` | :ref:`global_transform` | | +-----------------------------------------+------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Vector3` | :ref:`rotation` | | +-----------------------------------------+------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Vector3` | :ref:`rotation_degrees` | ``Vector3( 0, 0, 0 )`` | +-----------------------------------------+------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Vector3` | :ref:`scale` | ``Vector3( 1, 1, 1 )`` | +-----------------------------------------+------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Transform` | :ref:`transform` | ``Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )`` | +-----------------------------------------+------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`Vector3` | :ref:`translation` | ``Vector3( 0, 0, 0 )`` | +-----------------------------------------+------------------------------------------------------------------+-----------------------------------------------------+ | :ref:`bool` | :ref:`visible` | ``true`` | +-----------------------------------------+------------------------------------------------------------------+-----------------------------------------------------+ Methods ------- +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`force_update_transform` **(** **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Spatial` | :ref:`get_parent_spatial` **(** **)** |const| | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`World` | :ref:`get_world` **(** **)** |const| | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`global_rotate` **(** :ref:`Vector3` axis, :ref:`float` angle **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`global_scale` **(** :ref:`Vector3` scale **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`global_translate` **(** :ref:`Vector3` offset **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`hide` **(** **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_local_transform_notification_enabled` **(** **)** |const| | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_scale_disabled` **(** **)** |const| | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_set_as_toplevel` **(** **)** |const| | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_transform_notification_enabled` **(** **)** |const| | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_visible_in_tree` **(** **)** |const| | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`look_at` **(** :ref:`Vector3` target, :ref:`Vector3` up **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`look_at_from_position` **(** :ref:`Vector3` position, :ref:`Vector3` target, :ref:`Vector3` up **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`orthonormalize` **(** **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`rotate` **(** :ref:`Vector3` axis, :ref:`float` angle **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`rotate_object_local` **(** :ref:`Vector3` axis, :ref:`float` angle **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`rotate_x` **(** :ref:`float` angle **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`rotate_y` **(** :ref:`float` angle **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`rotate_z` **(** :ref:`float` angle **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`scale_object_local` **(** :ref:`Vector3` scale **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`set_as_toplevel` **(** :ref:`bool` enable **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`set_disable_scale` **(** :ref:`bool` disable **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`set_identity` **(** **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`set_ignore_transform_notification` **(** :ref:`bool` enabled **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`set_notify_local_transform` **(** :ref:`bool` enable **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`set_notify_transform` **(** :ref:`bool` enable **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`show` **(** **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Vector3` | :ref:`to_global` **(** :ref:`Vector3` local_point **)** |const| | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Vector3` | :ref:`to_local` **(** :ref:`Vector3` global_point **)** |const| | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`translate` **(** :ref:`Vector3` offset **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`translate_object_local` **(** :ref:`Vector3` offset **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`update_gizmo` **(** **)** | +-------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Signals ------- .. _class_Spatial_signal_visibility_changed: - **visibility_changed** **(** **)** Emitted when node visibility changes. Constants --------- .. _class_Spatial_constant_NOTIFICATION_TRANSFORM_CHANGED: .. _class_Spatial_constant_NOTIFICATION_ENTER_WORLD: .. _class_Spatial_constant_NOTIFICATION_EXIT_WORLD: .. _class_Spatial_constant_NOTIFICATION_VISIBILITY_CHANGED: - **NOTIFICATION_TRANSFORM_CHANGED** = **2000** --- Spatial nodes receives this notification when their global transform changes. This means that either the current or a parent node changed its transform. In order for :ref:`NOTIFICATION_TRANSFORM_CHANGED` to work, users first need to ask for it, with :ref:`set_notify_transform`. The notification is also sent if the node is in the editor context and it has a valid gizmo. - **NOTIFICATION_ENTER_WORLD** = **41** --- Spatial nodes receives this notification when they are registered to new :ref:`World` resource. - **NOTIFICATION_EXIT_WORLD** = **42** --- Spatial nodes receives this notification when they are unregistered from current :ref:`World` resource. - **NOTIFICATION_VISIBILITY_CHANGED** = **43** --- Spatial nodes receives this notification when their visibility changes. Property Descriptions --------------------- .. _class_Spatial_property_gizmo: - :ref:`SpatialGizmo` **gizmo** +----------+------------------+ | *Setter* | set_gizmo(value) | +----------+------------------+ | *Getter* | get_gizmo() | +----------+------------------+ The :ref:`SpatialGizmo` for this node. Used for example in :ref:`EditorSpatialGizmo` as custom visualization and editing handles in Editor. ---- .. _class_Spatial_property_global_transform: - :ref:`Transform` **global_transform** +----------+-----------------------------+ | *Setter* | set_global_transform(value) | +----------+-----------------------------+ | *Getter* | get_global_transform() | +----------+-----------------------------+ World space (global) :ref:`Transform` of this node. ---- .. _class_Spatial_property_rotation: - :ref:`Vector3` **rotation** +----------+---------------------+ | *Setter* | set_rotation(value) | +----------+---------------------+ | *Getter* | get_rotation() | +----------+---------------------+ Rotation part of the local transformation in radians, specified in terms of YXZ-Euler angles in the format (X angle, Y angle, Z angle). **Note:** In the mathematical sense, rotation is a matrix and not a vector. The three Euler angles, which are the three independent parameters of the Euler-angle parametrization of the rotation matrix, are stored in a :ref:`Vector3` data structure not because the rotation is a vector, but only because :ref:`Vector3` exists as a convenient data-structure to store 3 floating-point numbers. Therefore, applying affine operations on the rotation "vector" is not meaningful. ---- .. _class_Spatial_property_rotation_degrees: - :ref:`Vector3` **rotation_degrees** +-----------+-----------------------------+ | *Default* | ``Vector3( 0, 0, 0 )`` | +-----------+-----------------------------+ | *Setter* | set_rotation_degrees(value) | +-----------+-----------------------------+ | *Getter* | get_rotation_degrees() | +-----------+-----------------------------+ Rotation part of the local transformation in degrees, specified in terms of YXZ-Euler angles in the format (X angle, Y angle, Z angle). ---- .. _class_Spatial_property_scale: - :ref:`Vector3` **scale** +-----------+------------------------+ | *Default* | ``Vector3( 1, 1, 1 )`` | +-----------+------------------------+ | *Setter* | set_scale(value) | +-----------+------------------------+ | *Getter* | get_scale() | +-----------+------------------------+ Scale part of the local transformation. ---- .. _class_Spatial_property_transform: - :ref:`Transform` **transform** +-----------+-----------------------------------------------------+ | *Default* | ``Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )`` | +-----------+-----------------------------------------------------+ | *Setter* | set_transform(value) | +-----------+-----------------------------------------------------+ | *Getter* | get_transform() | +-----------+-----------------------------------------------------+ Local space :ref:`Transform` of this node, with respect to the parent node. ---- .. _class_Spatial_property_translation: - :ref:`Vector3` **translation** +-----------+------------------------+ | *Default* | ``Vector3( 0, 0, 0 )`` | +-----------+------------------------+ | *Setter* | set_translation(value) | +-----------+------------------------+ | *Getter* | get_translation() | +-----------+------------------------+ Local translation of this node. ---- .. _class_Spatial_property_visible: - :ref:`bool` **visible** +-----------+--------------------+ | *Default* | ``true`` | +-----------+--------------------+ | *Setter* | set_visible(value) | +-----------+--------------------+ | *Getter* | is_visible() | +-----------+--------------------+ If ``true``, this node is drawn. The node is only visible if all of its antecedents are visible as well (in other words, :ref:`is_visible_in_tree` must return ``true``). Method Descriptions ------------------- .. _class_Spatial_method_force_update_transform: - void **force_update_transform** **(** **)** Forces the transform to update. Transform changes in physics are not instant for performance reasons. Transforms are accumulated and then set. Use this if you need an up-to-date transform when doing physics operations. ---- .. _class_Spatial_method_get_parent_spatial: - :ref:`Spatial` **get_parent_spatial** **(** **)** |const| Returns the parent ``Spatial``, or an empty :ref:`Object` if no parent exists or parent is not of type ``Spatial``. ---- .. _class_Spatial_method_get_world: - :ref:`World` **get_world** **(** **)** |const| Returns the current :ref:`World` resource this ``Spatial`` node is registered to. ---- .. _class_Spatial_method_global_rotate: - void **global_rotate** **(** :ref:`Vector3` axis, :ref:`float` angle **)** Rotates the global (world) transformation around axis, a unit :ref:`Vector3`, by specified angle in radians. The rotation axis is in global coordinate system. ---- .. _class_Spatial_method_global_scale: - void **global_scale** **(** :ref:`Vector3` scale **)** Scales the global (world) transformation by the given :ref:`Vector3` scale factors. ---- .. _class_Spatial_method_global_translate: - void **global_translate** **(** :ref:`Vector3` offset **)** Moves the global (world) transformation by :ref:`Vector3` offset. The offset is in global coordinate system. ---- .. _class_Spatial_method_hide: - void **hide** **(** **)** Disables rendering of this node. Changes :ref:`visible` to ``false``. ---- .. _class_Spatial_method_is_local_transform_notification_enabled: - :ref:`bool` **is_local_transform_notification_enabled** **(** **)** |const| Returns whether node notifies about its local transformation changes. ``Spatial`` will not propagate this by default. ---- .. _class_Spatial_method_is_scale_disabled: - :ref:`bool` **is_scale_disabled** **(** **)** |const| Returns whether this node uses a scale of ``(1, 1, 1)`` or its local transformation scale. ---- .. _class_Spatial_method_is_set_as_toplevel: - :ref:`bool` **is_set_as_toplevel** **(** **)** |const| Returns whether this node is set as Toplevel, that is whether it ignores its parent nodes transformations. ---- .. _class_Spatial_method_is_transform_notification_enabled: - :ref:`bool` **is_transform_notification_enabled** **(** **)** |const| Returns whether the node notifies about its global and local transformation changes. ``Spatial`` will not propagate this by default. ---- .. _class_Spatial_method_is_visible_in_tree: - :ref:`bool` **is_visible_in_tree** **(** **)** |const| Returns ``true`` if the node is present in the :ref:`SceneTree`, its :ref:`visible` property is ``true`` and all its antecedents are also visible. If any antecedent is hidden, this node will not be visible in the scene tree. ---- .. _class_Spatial_method_look_at: - void **look_at** **(** :ref:`Vector3` target, :ref:`Vector3` up **)** Rotates itself so that the local -Z axis points towards the ``target`` position. The transform will first be rotated around the given ``up`` vector, and then fully aligned to the target by a further rotation around an axis perpendicular to both the ``target`` and ``up`` vectors. Operations take place in global space. ---- .. _class_Spatial_method_look_at_from_position: - void **look_at_from_position** **(** :ref:`Vector3` position, :ref:`Vector3` target, :ref:`Vector3` up **)** Moves the node to the specified ``position``, and then rotates itself to point toward the ``target`` as per :ref:`look_at`. Operations take place in global space. ---- .. _class_Spatial_method_orthonormalize: - void **orthonormalize** **(** **)** Resets this node's transformations (like scale, skew and taper) preserving its rotation and translation by performing Gram-Schmidt orthonormalization on this node's :ref:`Transform`. ---- .. _class_Spatial_method_rotate: - void **rotate** **(** :ref:`Vector3` axis, :ref:`float` angle **)** Rotates the local transformation around axis, a unit :ref:`Vector3`, by specified angle in radians. ---- .. _class_Spatial_method_rotate_object_local: - void **rotate_object_local** **(** :ref:`Vector3` axis, :ref:`float` angle **)** Rotates the local transformation around axis, a unit :ref:`Vector3`, by specified angle in radians. The rotation axis is in object-local coordinate system. ---- .. _class_Spatial_method_rotate_x: - void **rotate_x** **(** :ref:`float` angle **)** Rotates the local transformation around the X axis by angle in radians. ---- .. _class_Spatial_method_rotate_y: - void **rotate_y** **(** :ref:`float` angle **)** Rotates the local transformation around the Y axis by angle in radians. ---- .. _class_Spatial_method_rotate_z: - void **rotate_z** **(** :ref:`float` angle **)** Rotates the local transformation around the Z axis by angle in radians. ---- .. _class_Spatial_method_scale_object_local: - void **scale_object_local** **(** :ref:`Vector3` scale **)** Scales the local transformation by given 3D scale factors in object-local coordinate system. ---- .. _class_Spatial_method_set_as_toplevel: - void **set_as_toplevel** **(** :ref:`bool` enable **)** Makes the node ignore its parents transformations. Node transformations are only in global space. ---- .. _class_Spatial_method_set_disable_scale: - void **set_disable_scale** **(** :ref:`bool` disable **)** Sets whether the node uses a scale of ``(1, 1, 1)`` or its local transformation scale. Changes to the local transformation scale are preserved. ---- .. _class_Spatial_method_set_identity: - void **set_identity** **(** **)** Reset all transformations for this node (sets its :ref:`Transform` to the identity matrix). ---- .. _class_Spatial_method_set_ignore_transform_notification: - void **set_ignore_transform_notification** **(** :ref:`bool` enabled **)** Sets whether the node ignores notification that its transformation (global or local) changed. ---- .. _class_Spatial_method_set_notify_local_transform: - void **set_notify_local_transform** **(** :ref:`bool` enable **)** Sets whether the node notifies about its local transformation changes. ``Spatial`` will not propagate this by default. ---- .. _class_Spatial_method_set_notify_transform: - void **set_notify_transform** **(** :ref:`bool` enable **)** Sets whether the node notifies about its global and local transformation changes. ``Spatial`` will not propagate this by default, unless it is in the editor context and it has a valid gizmo. ---- .. _class_Spatial_method_show: - void **show** **(** **)** Enables rendering of this node. Changes :ref:`visible` to ``true``. ---- .. _class_Spatial_method_to_global: - :ref:`Vector3` **to_global** **(** :ref:`Vector3` local_point **)** |const| Transforms ``local_point`` from this node's local space to world space. ---- .. _class_Spatial_method_to_local: - :ref:`Vector3` **to_local** **(** :ref:`Vector3` global_point **)** |const| Transforms ``global_point`` from world space to this node's local space. ---- .. _class_Spatial_method_translate: - void **translate** **(** :ref:`Vector3` offset **)** Changes the node's position by the given offset :ref:`Vector3`. Note that the translation ``offset`` is affected by the node's scale, so if scaled by e.g. ``(10, 1, 1)``, a translation by an offset of ``(2, 0, 0)`` would actually add 20 (``2 * 10``) to the X coordinate. ---- .. _class_Spatial_method_translate_object_local: - void **translate_object_local** **(** :ref:`Vector3` offset **)** Changes the node's position by the given offset :ref:`Vector3` in local space. ---- .. _class_Spatial_method_update_gizmo: - void **update_gizmo** **(** **)** Updates the :ref:`SpatialGizmo` of this node. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |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.)`