docs.unity3d.com
    Show / Hide Table of Contents

    Refactoring the script

    Note
    For versions 2019/2020 LTS, download the visual scripting solution from the Unity Asset Store.

    Visual scripting automatically calls methods, fields and properties from any custom script in the project. For example, you can create a unit from a custom Player class with a TakeDamage method.

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

    In the script graph, if you change your script and rename or remove the TakeDamage method or the Player class, it would appear as:

    The associated script would appear as:

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

    Finally, the unit turns red in the graph window and visual scripting logs a warning to the console.

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

    Renaming Members

    To continue the previous example, to fix the failure, reopen the script file and map the new name to the previous name with the [RenamedFrom] attribute. It takes a single string parameter,... that is 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. Visual scripting cannot guarantee Unity reserializes all the graphs with the corrected name. Visual scripting's [RenamedFrom] attribute works much like Unity's own [FormerlySerializedAs] attribute in that regard.

    Renaming Types

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

    For example, Player class is renamed 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, this wasn't required as the name was in the global namespace.

    In This Article
    • Renaming Members
    • Renaming Types
    Back to top
    Copyright © 2023 Unity Technologies — Terms of use
    • Legal
    • Privacy Policy
    • Cookies
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)
    "Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
    Generated by DocFX on 18 October 2023