Refactoring | Bolt Visual Scripting | 1.4.12
docs.unity3d.com
    Show / Hide Table of Contents

    Refactoring

    Bolt can automatically call methods, fields and properties from any custom script in your project. For example, you can create a node from a custom Player class with a TakeDamage method:

        using UnityEngine;
    
        public class Player : MonoBehaviour
        {
            public void TakeDamage(int damage)
            {
                // ...
            }
        }
    

    In a flow graph, it would look like:

    If you change your script and rename or remove the TakeDamage method or the Player class. For example:

        using UnityEngine;
    
        public class Player : MonoBehaviour
        {
            public void InflictDamage(int damage)
            {
                // ...
            }
        }
    

    The node will turn red in the graph window and Bolt will log a warning to the console.

        Failed to define Bolt.InvokeMember:
        System.MissingMemberException: No matching member found: 'Player.TakeDamage'
    

    Renaming Members

    In order to fix it, you can reopen the script file and map the new name to the previous name with the [RenamedFrom] attribute.

    It takes a single string parameter: the previous name of the member.

        using UnityEngine;
        using Ludiq;
    
        public class Player : MonoBehaviour
        {
            [RenamedFrom("TakeDamage")]
            public void InflictDamage(int damage)
            {
                // ...
            }
        }
    

    It is recommended to leave the attribute in your source even after a successful recompile. This is because Bolt cannot guarantee Unity will reserialize all your graphs with the corrected name. Bolt's [RenamedFrom] attribute works much like Unity's own [FormerlySerializedAs] attribute in that regard.

    Renaming Types

    You can also rename types (including classes, structs and enums) using the [RenamedFrom] attribute.

    For example, if you renamed your Player class to Character:

        using UnityEngine;
        using Ludiq;
    
        [RenamedFrom("Player")]
        public class Character : MonoBehaviour
        {
            [RenamedFrom("TakeDamage")]
            public void InflictDamage(int damage)
            {
                // ...
            }
        }
    

    Note: The old name must include the namespace. In the previous example, it isn't required because we are in the global namespace.

    Back to top Copyright © 2020 Unity Technologies
    Generated by DocFX