Note |
---|
To use Bolt, which is Unity’s visual scripting solution, you must purchase it on the Unity Asset Store. |
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'
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.
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.