docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    Script commands

    Commands for creating C# script files, attaching MonoBehaviours to GameObjects, and reading/writing serialized fields. Writing a .cs file does not make its type available — Unity must import and compile it (a domain reload) first. The flow is: create_script → recompile → poll recompile_status (until completed/up_to_date) → attach_script.

    create_script

    Create a new C# script (default base class MonoBehaviour) from a template under the authoring root. NOTE: the type does not exist until a recompile completes — to attach it, call recompile, poll recompile_status, then attach_script.

    Parameter Required Default Description
    name yes – Class/file name without extension, e.g. PlayerController. Must be a valid C# identifier.
    path no – Folder (relative to the authoring root; the Assets/ prefix is optional) to write the .cs into. Defaults to the authoring root.
    namespace no – Optional namespace to wrap the class in. Omit for the global namespace.
    base_class no MonoBehaviour Base class to derive from. Defaults to MonoBehaviour.
    overwrite no false Overwrite the file if it already exists. Defaults to false (an existing file is an error).

    Returns: AuthoringResult Notes: Does not trigger a recompile; the created type is not usable until a recompile completes (poll recompile_status).

    attach_script

    Add a MonoBehaviour to a GameObject by its (compiled) type name OR by its script asset path. Provide exactly one of 'type' or 'script'. If the type isn't compiled yet, returns a recoverable error: recompile, poll recompile_status, then retry.

    Parameter Required Default Description
    target yes – Reference to the GameObject to add the component to (globalId/path/guid/instanceId/hierarchyPath).
    type no – Component type name to add, e.g. PlayerController or Game.Player.PlayerController. Must already be compiled. Mutually exclusive with 'script'.
    script no – Script asset path, e.g. 'Assets/Pool/Scripts/CueShooter.cs'. The backing class is resolved via MonoScript.GetClass(), so the class name may differ from the filename. Mutually exclusive with 'type'.

    Returns: AuthoringResult Notes: Undo-able. Provide exactly one of type or script. A not-yet-compiled type returns a recoverable error (recompile, poll recompile_status, then retry).

    set_serialized_field

    Set a serialized field on a component/asset. Supports primitives, enums, Vector/Color/Rect/Bounds, object references (value = an ObjectRef: asset by guid/fileId/path or scene object by instanceId/hierarchyPath), and array elements via 'name.Array.data[i]' (or 'name.Array.size' to resize).

    Parameter Required Default Description
    target yes – Reference to the component or asset to modify (globalId/path/guid/instanceId/hierarchyPath). May be a GameObject when 'component' is given.
    field yes – SerializedProperty path, e.g. 'speed', 'settings.speed', or 'waypoints.Array.data[0]'.
    value yes – JSON value to assign. For object references pass an ObjectRef object (or null to clear). For enums pass the value name.
    component no – Component type name on the target GameObject (e.g. 'Rigidbody'). Use when 'target' is a GameObject; omit when 'target' is already a component handle.

    Returns: AuthoringResult Notes: Undo-able.

    get_serialized_fields

    Read serialized fields of a component/asset. Returns each top-level field's name, type and value (object references are returned as re-usable handles). Pass 'field' to read a single SerializedProperty path.

    Parameter Required Default Description
    target yes – Reference to the component or asset to read (globalId/path/guid/instanceId/hierarchyPath). May be a GameObject when 'component' is given.
    field no – Optional single SerializedProperty path to read (e.g. 'speed' or 'items.Array.data[0]'). Omit to read all top-level fields.
    component no – Component type name on the target GameObject (e.g. 'Rigidbody'). Use when 'target' is a GameObject; omit when 'target' is already a component handle.

    Returns: object

    See Creating commands and Connectivity.

    In This Article
    Back to top
    Copyright © 2026 Unity Technologies — Trademarks and terms of use
    • Legal
    • Privacy Policy
    • Cookie Policy
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)