| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 | .. _doc_creating_script_templates:Creating script templates=========================Godot provides a way to use script templates as seen in the``Script Create Dialog`` while creating a new script:.. image:: img/script_create_dialog_templates.webpA set of built-in script templates are provided with the editor, but it isalso possible to create new ones and set them by default, both per projectand at editor scope.Templates are linked to a specific node type, so when you create a scriptyou will only see the templates corresponding to that particular node, orone of its parent types.For example, if you are creating a script for a CharacterBody3D, you willonly see templates defined for CharacterBody3Ds, Node3Ds or Nodes.Locating the templates----------------------There are two places where templates can be managed.Editor-defined templates~~~~~~~~~~~~~~~~~~~~~~~~These are available globally throughout any project. The location of thesetemplates are determined per each OS:-  Windows: ``%APPDATA%\Godot\script_templates\``-  Linux: ``$HOME/.config/godot/script_templates/``-  macOS: ``$HOME/Library/Application Support/Godot/script_templates/``If you're getting Godot from somewhere other than the official website, suchas Steam, the folder might be in a different location. You can find it usingthe Godot editor. Go to ``Editor > Open Editor Data/Settings Folder`` and itwill open a folder in your file browser, inside that folder is the``script_templates`` folder.Project-defined templates~~~~~~~~~~~~~~~~~~~~~~~~~The default path to search for templates is the``res://script_templates/`` directory. The path can be changed by configuring the project setting:ref:`Editor > Script > Templates Search Path<class_ProjectSettings_property_editor/script/templates_search_path>`,both via code and the editor.If no ``script_templates`` directory is found within a project, it is simplyignored.Template organization and naming~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Both editor and project defined templates are organized in the following way:::  template_path/node_type/file.extensionwhere:* ``template_path`` is one of the 2 locations discussed in the previous two sections.* ``node_type`` is the node it will apply to (for example, :ref:`Node <class_Node>`, or :ref:`CharacterBody3D <class_CharacterBody3D>`),  This is **case-sensitive**. If a script isn't in the proper ``node_type`` folder, it won't be detected.* ``file`` is the custom name you can chose for the template (for example, ``platformer_movement`` or ``smooth_camera``).* ``extension`` indicates which language the template will apply to (it should be ``gd`` for GDScript or ``cs`` for C#).For example:-  ``script_templates/Node/smooth_camera.gd``-  ``script_templates/CharacterBody3D/platformer_movement.gd``Default behavior and overriding it----------------------------------By default:* the template's name is the same as the file name (minus the extension, prettyfied)* the description is empty* the space indent is set to 4* the template will not be set as the default for the given nodeIt is possible to customize this behavior by adding meta headers at the startof your file, like this:.. tabs:: .. code-tab:: gdscript GDScript  # meta-name: Platformer movement  # meta-description: Predefined movement for classical platformers  # meta-default: true  # meta-space-indent: 4 .. code-tab:: csharp  // meta-name: Platformer movement  // meta-description: Predefined movement for classical platformers  // meta-default: true  // meta-space-indent: 4In this case, the name will be set to "Platformer movement", with the given custom description, andit will be set as the default template for the node in which directory it has been saved.This is an example of utilizing custom templates at editor and project level:.. image:: img/script_create_dialog_custom_templates.webp.. note:: The script templates have the same extension as the regular script          files. This may lead to an issue of a script parser treating those templates as          actual scripts within a project. To avoid this, make sure to ignore the          directory containing them by creating an empty ``.gdignore`` file. The directory won't be          visible throughout the project's filesystem anymore, yet the templates can be          modified by an external text editor anytime... tip::    By default, every C# file inside the project directory is included in the compilation.    Script templates must be manually excluded from the C# project to avoid build errors.    See `Exclude files from the build <https://learn.microsoft.com/en-us/visualstudio/msbuild/how-to-exclude-files-from-the-build>`_ in the Microsoft documentation.It is possible to create editor-level templates that have the same level as a project-specifictemplates, and also that have the same name as a built-in one, all will be shown on the new scriptdialog.Default template----------------To override the default template, create a custom template at editor or project level inside a``Node`` directory (or a more specific type, if only a subtype wants to be overridden) and startthe file with the ``meta-default: true`` header.Only one template can be set as default at the same time for the same node type.The ``Default`` templates for basic Nodes, for both GDScript and C#, are shown here so you canuse these as the base for creating other templates:.. tabs:: .. code-tab:: gdscript GDScript    # meta-description: Base template for Node with default Godot cycle methods    extends _BASE_    # Called when the node enters the scene tree for the first time.    func _ready() -> void:        pass # Replace with function body.    # Called every frame. 'delta' is the elapsed time since the previous frame.    func _process(delta: float) -> void:        pass .. code-tab:: csharp    // meta-description: Base template for Node with default Godot cycle methods    using _BINDINGS_NAMESPACE_;    using System;    public partial class _CLASS_ : _BASE_    {        // Called when the node enters the scene tree for the first time.        public override void _Ready()        {        }        // Called every frame. 'delta' is the elapsed time since the previous frame.        public override void _Process(double delta)        {        }    }The Godot editor provides a set of useful built-in node-specific templates, such as``basic_movement`` for both :ref:`CharacterBody2D <class_CharacterBody2D>` and:ref:`CharacterBody3D <class_CharacterBody3D>` and ``plugin`` for:ref:`EditorPlugin <class_EditorPlugin>`.List of template placeholders-----------------------------The following describes the complete list of built-in template placeholderswhich are currently implemented.Base placeholders~~~~~~~~~~~~~~~~~+--------------------------+----------------------------------------------------+| Placeholder              | Description                                        |+==========================+====================================================+| ``_BINDINGS_NAMESPACE_`` | The name of the Godot namespace (used in C# only). |+--------------------------+----------------------------------------------------+| ``_CLASS_``              | The name of the new class.                         |+--------------------------+----------------------------------------------------+| ``_CLASS_SNAKE_CASE_``   | The name of the new class as ``snake_case``        ||                          | (used in GDScript only).                           |+--------------------------+----------------------------------------------------+| ``_BASE_``               | The base type a new script inherits from.          |+--------------------------+----------------------------------------------------+| ``_TS_``                 | Indentation placeholder. The exact type and number ||                          | of whitespace characters used for indentation is   ||                          | determined by the ``text_editor/indent/type`` and  ||                          | ``text_editor/indent/size`` settings in the        ||                          | :ref:`EditorSettings <class_EditorSettings>`       ||                          | respectively. Can be overridden by the             ||                          | ``meta-space-indent`` header on the template.      |+--------------------------+----------------------------------------------------+Type placeholders~~~~~~~~~~~~~~~~~There used to be, in Godot 3.x, placeholders for GDScript type hints thatwould get replaced whenever a template was used to create a new script, such as:``%INT_TYPE%``, ``%STRING_TYPE%``, ``%FLOAT_TYPE%`` or ``%VOID_RETURN%``.The placeholders no longer work for Godot 4.x, but if the setting``text_editor/completion/add_type_hints`` from:ref:`EditorSettings <class_EditorSettings>` is disabled, type hintsfor parameters and return types will be automatically removed for a fewbase types:* ``int``* ``String``* ``Array[String]``* ``float``* ``void``* ``:=`` will be transformed into ``=``
 |