User Guide Cancel

Substance 3D for Unity Scripting | Ecosystem and Plug-ins

  1. Substance 3D home
  2. Ecosystems and Plugins
    1. Home
    2. Game Engines
      1. Unreal Engine
        1. Unreal Engine 5
          1. Unreal Engine 5 overview
          2. Unreal Engine 5 Release Notes
            1. Unreal plugin 5.3.2
            2. Unreal plugin 5.0.3
            3. Unreal plugin 5.0.2
            4. Unreal plugin 5.0.1
          3. Plugin Overview - UE5
          4. Plugin Settings - UE5
          5. Substance Input Image - UE5
          6. Material Instance Definition - UE5
          7. Material Template Usage - UE5
          8. Out-of-the-Box Material Templates
          9. Tiling Substance - UE5
          10. Substance 3D Plugin Default Templates
          11. Substance 3D Assets Library Usage - UE5
          12. Blueprints - UE5
            1. Blueprint(UE5): Substance material parameters
            2. Blueprint(UE5): Dynamic Material Instance Skip to end of metadata
            3. Blueprint(UE5): Aggregate Substance
            4. Blueprint(UE5): Node Reference
          13. Unreal Engine 5 Scripting
          14. Installing to Source Builds
        2. Unreal Engine 4
          1. Unreal Engine 4 overview
          2. Unreal Engine 4 plugin release notes
            1. Unreal plugin 4.27.0.1
            2. Unreal plugin 4.26.0.21
            3. Unreal plugin 4.26.0.2
            4. Unreal plugin 4.26.0.1
            5. Unreal plugin 4.25.0.5
            6. Unreal plugin 4.25.0.4
            7. Unreal plugin 4.25.0.3
            8. Unreal plugin 4.24.0.3
            9. Unreal plugin 4.23.0.2
            10. Unreal plugin 4.23.0.1
            11. Unreal plugin 4.22.0.33
            12. Unreal plugin 4.22.0.32
            13. Unreal plugin 4.21.0.31
          3. Plugin Overview - UE4
          4. Plugin Settings - UE4
          5. Substance Input Image - UE4
          6. Material Instance Definition - UE4
          7. Tiling Substance - UE4
          8. Working with Bump Offset (Parallax) - UE4
          9. Working with Displacement - UE4
          10. Source in UE4
          11. Live Link in UE4
          12. Blueprints - UE4
            1. Blueprint(UE4): Substance material parameters
            2. Blueprint(UE4): Dynamic Material Instance
            3. Blueprint(UE4): Aggregate Substance
            4. Blueprint(UE4): Node Reference
          13. Unreal Engine 4 Scripting
      2. Unity
        1. Unity overview
        2. Unity Release Notes
          1. Unity 3.0.0+
          2. Unity 2.6.0
          3. Unity 2.5.4
          4. Unity 2.5.3
          5. Unity 2.5.2
          6. Unity 2.5.1
          7. Unity 2.4.5
          8. Unity 2.4.4
          9. Unity 2.4.3
          10. Unity 2.4.1
          11. Unity 2.4.0
          12. Unity 2.3.4
          13. Unity 2.3.2
          14. Unity 2.2.2
          15. Unity 2.2.0
        3. Downloading Substance 3D Plugin in Unity
        4. Unity Plugin Overview
        5. Unity Preferences
        6. Optimization Guidelines
        7. Upgrading Projects/Known Issues
        8. Managing Substance Graphs
        9. Changing parameters
        10. Generated Textures (Packing)
        11. Rendering Color Space
        12. Using Image Inputs
        13. Publishing for Mobile
        14. Substance 3D for Unity Scripting
          1. Unity Scripting overview
          2. Class Documentation
            1. SubstanceEditorTools
            2. SubstanceRuntime Class
            3. SubstanceRuntimeGraph Class
              1. SubstanceRuntimeGraph Class overview
              2. Member Function Documentation
              3. Detailed Description
        15. Scripting in Unity (Deprecated)
        16. API Overview
        17. Scripting API
        18. C# Example Script
        19. Substance 3D Assets Library Usage
        20. Removing Substance Plugin
        21. Substance 3D in Unity Tutorials
        22. Physical Size in Unity
        23. Sharing sbsar Files Between Projects
      3. Lumberyard
        1. Lumberyard overview
        2. Importing a Substance
        3. Assigning a Substance
        4. Parameters and outputs
        5. Flow Graph API
      4. Roblox
    3. 3D Applications
      1. Maya
        1. Maya Plugin Release Notes
          1. Maya 3.0.0+
          2. Maya 2.4.1
          3. Maya 2.4.0
          4. Maya 2.3
          5. Maya 2.2.3
          6. Maya 2.2.2
          7. Maya 2.2.1
          8. Maya 2.1.9
          9. Maya 2.1.8
          10. Maya 2.1.7
          11. Maya 2.1.6
          12. Maya 2.1.5
          13. Maya 2.1.4
          14. Maya 2.1.3
          15. Maya 2.1.2
          16. Maya 2.1.1
          17. Maya 2.1.0
          18. Maya 2.0.3
          19. Maya 0.9.11
        2. Substance in Maya Overview
        3. Installation
        4. Substance Output Node
        5. Using Workflows
        6. Working with Outputs
        7. Procedural Sampling
        8. Presets
        9. Settings
        10. Arnold Support
        11. Apply Workflow To Maps
        12. Maya Scripting
        13. Physical Size in Maya
      2. 3ds Max
        1. 3ds Max Plugin Release Notes
          1. 3ds Max 3.0.0+
          2. 3ds Max 2.8.0
          3. 3ds Max 2.7.0
          4. 3ds Max 2.4.2
          5. 3ds Max 2.4.1
          6. 3ds Max 2.4.0
          7. 3ds Max 2.3.4
          8. 3ds Max 2.3.3
          9. 3ds Max 2.3.2
          10. 3ds Max 2.3.1
          11. 3ds Max 2.2.0
        2. Substance in 3ds Max Overview
        3. Substance Settings
        4. Using Presets
        5. Batch Import
        6. Using Workflows in 3ds Max
        7. Substance Source
        8. Animating a Substance material
        9. 3ds MAX Scripting API
        10. Troubleshooting
      3. MODO
        1. MODO overview
        2. Modo Plugin Release Notes
          1. Modo 2.7.3
          2. Modo v. 2.7.5
          3. Modo v. 2.7.4
          4. Modo v. 2.7.3
          5. Modo v. 2.7.2
          6. Modo v. 2.7.1
          7. Modo v. 2.7.0
        3. Substance in MODO Overview
        4. Modo Installation
        5. Parameters
        6. Custom Materials
        7. Working with Normals
        8. Working with Emissive
        9. Bump and Displacement
        10. Working with References
        11. Animating Substances
        12. Copy/Duplicate Substance
        13. Environment and Rendering Setup
        14. Modo Switch Engine
        15. Tiling Modo textures
      4. Cinema 4D
        1. Cinema 4D overview
        2. Set-Up
        3. Using the Substance Plugin
        4. Substance Asset Manager
        5. Substance Shader
        6. Attribute Manager
        7. Visual Feedback of Animated Substances
      5. Houdini
      6. Blender
        1. Blender overview
        2. Release Notes
          1. Add-on 2.0.0+
          2. Add-on 1.0.2
          3. Add-on 0.9.5
          4. Add-on 0.9.3
          5. Add-on 0.9.2
          6. Add-on 0.9.1
        3. Substance in Blender Overview
        4. Downloading and Installing the Plugin
        5. Preferences
        6. The Substance 3D Panel
        7. Shortcuts and Navigation
        8. Workflows
        9. Physical size in Blender
        10. Substance 3D Assets Library
        11. Troubleshooting
        12. Uninstalling the Add-on
        13. Substance 3D Add-on for Blender Tutorials
    4. Creative Cloud Applications
      1. Photoshop
    5. Renderers
      1. Converting Substance outputs
      2. Color Management
        1. Color Management overview
        2. Substance textures in Maya
        3. Substance textures in 3ds Max
      3. Arnold
        1. Arnold overview
        2. Arnold - Substance in 3ds Max
        3. Arnold - Substance in Maya
        4. Arnold - Substance Painter
      4. Vray
        1. Vray overview
        2. Vray Next - Substance in Maya
        3. Vray Next - Substance in 3ds Max
        4. Vray Next - Substance Painter
      5. Renderman
        1. Renderman overview
        2. Renderman for Maya
        3. Renderman - Substance Painter
      6. Redshift
        1. Redshift overview
        2. Redshift for 3ds Max
        3. Redshift for Maya
        4. Redshift - Substance Painter
      7. Maxwell
        1. Maxwell overview
        2. Maxwell - Substance in Maya
        3. Maxwell - Substance Painter
      8. Corona
        1. Corona overview
        2. Corona for 3ds Max
        3. Corona - Substance Painter
      9. Octane
        1. Octane overview
        2. Octane for 3ds Max
        3. Octane for MODO
      10. Keyshot
      11. Thea
      12. Maverick
        1. Maverick overview
        2. Substance Painter Integration
        3. Substance SBSAR Integration
      13. Toolbag
      14. Cycles and Eevee
        1. Cycles and Eevee overview
        2. Cycles and Eevee - Substance 3D for Blender
        3. Cycles and Eevee - Susbtance Painter
    6. Partnerships
      1. Substance 3D and Maxon One
      2. Substance 3D and Maxon One FAQ

Substance 3D for Unity Scripting

This section of the documentation contains details on the Substance 3D API that we provide via the Substance 3D plugin for Unity. Using the Substance APIs, you can write scripts to update and change Substance parameters at runtime. 

API Overview

The plugin is divided into 3 different assemblies.

  • Adobe.Substance
  • Adobe.Substance.Editor
  • Adobe.Substance.Runtime

Adobe.Substance

Contains shared components for interacting with the Substance SDK and generating matching Unity objects. It also has marshaling data structures for communicating between C# and the Substance SDK C++ API.

Adobe.Substance.Editor

Contains editor-specific classes for handling the display of information about the Unity Substance objects as well as handling the import pipeline for when sbsar files are added to the project. The SubstanceEditorEngine class is a singleton that handles the lifetime of the substance engine and all its managed instances.

Adobe.Substance.Runtime

This class has components that will handle the creation and management of Substance objects during runtime execution. The SubstanceRuntime is the equivalent of the SubstanceEditorEngine class for runtime. It will handle the initialization of the substance engine as well as the instantiation of any substance instance that user scripts will interact with.


Runtime usage

In order for the Substance Instance inputs to be modified at runtime, it is required to add a SubstanceRuntime←- Material to your scene (idealy to the same GameObject as you substance material). This class acts as a helper to set up the material using Adobe.Substance.Runtime.SubstanceRuntime singleton that manages the instantiation of Substance SDK objects at runtime.


Code examples

The following example shows how to change input parameters at runtime using the SubstanceRuntimeGraph.

Changing Parameters
using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using Adobe.Substance.Runtime; 
public class scifiScript: MonoBehaviour { 
  public Adobe.Substance.Runtime.SubstanceRuntimeGraph mySubstance; 
  // Use this for initialization 
  void Start() { 
    UpdateSubstance(); 
  } 
  public void UpdateSubstance() { 
    // panel color 
    mySubstance.SetInputColor("paint_color", new Color(0.237 f, 0.834 f, 0.045 f, 1.0 f)); 
    // panel size 
    mySubstance.SetInputVector2("square_open", new Vector2(0.101 f, 0.209 f)); 
    // wear level 
    mySubstance.SetInputFloat("wear_level", 0.977 f); 
    // Submit async render. 
    mySubstance.RenderAsync(); 
  } 
}

You can also use the SubstanceRuntimeGraph to have access to input and output information about your Substance Material.

Get Input Information
using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using Adobe.Substance.Runtime; 
public class scifiScript: MonoBehaviour { 
  public Adobe.Substance.Runtime.SubstanceRuntimeGraph mySubstance; 
  // Use this for initialization 
  void Start() { 
    UpdateSubstance(); 
  } 
  public void UpdateSubstance() { 
    SubstanceInputDescription desc = mySubstance.GetInputDescription("paint_color"); 
    Debug.Log($ "Input: {desc.Identifier}"); 
    Debug.Log($ "Index: {desc.Index}"); 
    Debug.Log($ "Type: {desc.Type}"); 
    Debug.Log($ "Label: {desc.Label}"); 
  } 
}

The following example shows how to create a custom preset menu in the editor with the SubstanceEditorTools.

Creating preset controls.
using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using Adobe.Substance.Runtime; 
public class scifiScript: MonoBehaviour { 
  public Adobe.Substance.Runtime.SubstanceRuntimeGraph mySubstance; 
  // Use this for initialization 
  void Start() { 
    UpdateSubstance(); 
  } 
  public void UpdateSubstance() { 
    SubstanceInputDescription desc = mySubstance.GetInputDescription("paint_color"); 
    Debug.Log($ "Input: {desc.Identifier}"); 
    Debug.Log($ "Index: {desc.Index}"); 
    Debug.Log($ "Type: {desc.Type}"); 
    Debug.Log($ "Label: {desc.Label}"); 
  } 
}

Get help faster and easier

New user?