Rasagar/Library/PackageCache/com.unity.visualeffectgraph/Documentation~/PropertyBinders.md
2024-08-26 23:07:20 +03:00

5.1 KiB

Property Binders

Property Binders are C# Behaviors you can attach to a GameObject that has a Visual Effect Component. Use these behaviors to make connections between scene or gameplay values and Exposed Properties for this Visual Effect instance.

For example, a Sphere Binder can automatically set the position and the radius of a Sphere Exposed Property using the values of a sphere collider that is linked in the scene.

Adding Property Binders

You can add Property Binders through a common MonoBehaviour called VFX Property Binder. This behavior allows you to use one or more Property Bindings. Each property binding is creates a relationship between an Exposed Property and a runtime or scene element.

You can also add Property binders through the Add Component menu. Unity creates a VFX Property Binder component automatically if one does not already exist.

Built-in Property Binders

The Visual Effect Graph package comes with the following built-in property binders:

  • Audio
    • Audio Spectrum to AttributeMap : Bakes the Audio Spectrum to an Attribute map and binds it to a Texture2D and uint Count properties.
  • GameObject:
    • Enabled : Binds the Enabled flag of a Game Object to a bool property.
  • Point Cache:
    • Hierarchy to AttributeMap : Binds positions an target positions of a hierarchy of transforms to Texture2Ds AttributeMaps and uint Count.
    • Multiple Position Binder: Binds positions of a list of transforms to a Texture2D AttributeMap and uint Count.
  • Input:
    • Axis : Binds the float value of an Input Axis to a float property.
    • Button : Binds the bool value of a button press state to a bool property.
    • Key : Binds the bool value of a keyboard key press state to a bool property.
    • Mouse : Binds the general values of a mouse (Position, Velocity, Clicks) to exposed properties.
    • Touch : Binds a input values of a Touch Input (Position, Velocity) to exposed properties.
  • Utility:
    • Light : Binds Light Properties (Color, Brightness, Radius) to exposed properties.
    • Plane : Binds Plane Properties (Position, Normal) to exposed properties.
    • Terrain : Binds Terrain Properties (Size, Height Map) to exposed properties.
  • Transform:
    • Position: Binds game object position to vector exposed property.
    • Position (previous): Binds previous game object position to vector exposed property.
    • Transform: Binds game object transform to transform exposed property.
    • Velocity: Binds game object velocity to vector exposed property.
  • Physics:
    • Raycast: Performs a Physics Raycast and binds its result values (hasHit, Position, Normal) to exposed properties..
  • Collider:
    • Sphere: Binds properties of a Sphere Collider to a Sphere exposed property.
  • UI:
    • Dropdown: Binds the index of a Dropdown to a uint exposed property.
    • Slider: Binds the value of a float slider to a uint exposed property.
    • Toggle: Binds the bool value of a toggle to a bool exposed property.

Writing Property Binders

To write property binders, add new C# classes to your project and extend the UnityEngine.VFX.Utility.VFXBinderBase class .

To extend the VFXBinderBase class, use one of the following methods:

  • bool IsValid(VisualEffect component): A method that validates that the binding can be made. The VFX Property Binder component will only perform the UpdateBinding() if this method returns true. You need to implement all checks in this method in order to determine if the binding.
  • void UpdateBinding(VisualEffect component): This method applies the bindings if IsValid returns true.

Example Code

The following example presents a simple Property Binder that sets a float Property value to the distance between the current game object and another (target) Game Object:

using UnityEngine;
using UnityEngine.VFX;
using UnityEngine.VFX.Utility;

// The VFXBinder Attribute will populate this class into the property binding's add menu.
[VFXBinder("Transform/Distance")]
// The class need to extend VFXBinderBase
public class DistanceBinder : VFXBinderBase
{
    // VFXPropertyBinding attributes enables the use of a specific
    // property drawer that populates the VisualEffect properties of a
    // certain type.
    [VFXPropertyBinding("System.Single")]
    public ExposedProperty distanceProperty;

    public Transform target;

    // The IsValid method need to perform the checks and return if the binding
    // can be achieved.
    public override bool IsValid(VisualEffect component)
    {
        return target != null && component.HasFloat(distanceProperty);
    }

    // The UpdateBinding method is the place where you perform the binding,
    // by assuming that it is valid. This method will be called only if
    // IsValid returned true.
    public override void UpdateBinding(VisualEffect component)
    {
        component.SetFloat(distanceProperty, Vector3.Distance(transform.position, target.position));
    }
}