草稿:此页面上的内容已完成,但尚未经过审核。
属性绑定器
属性绑定器是可以通过 Visual Effect 组件附加到游戏对象的 C# 行为:这些行为能够在场景或游戏值与此 Visual Effect 实例的公开属性之间建立连接。
例如:Sphere Binder 可以使用场景中链接的球体碰撞体的值,自动设置球体公开属性的位置和半径。
添加属性绑定器
您可以通过名为 VFX Property Binder 的通用 MonoBehaviour 添加属性绑定器。此行为允许使用一个或多个属性绑定。每个属性绑定负责在公开属性和运行时或场景元素之间创建一个关系。
或者,您可以通过 Add Component 菜单直接添加属性绑定器。如果 VFX 属性绑定器组件不存在,则会创建它。
内置属性绑定器
Visual Effect Graph 包自带以下内置属性绑定器:
- Audio
- Audio Spectrum to AttributeMap:将 Audio Spectrum 烘焙到 Attribute 映射并将其绑定到 Texture2D 和 uint Count 属性
- GameObject:
- Enabled:将游戏对象的 Enabled 标志绑定到 bool 属性
- Point Cache
- Hierarchy to AttributeMap:将转换层次结构的目标位置绑定到 Texture2D AttributeMap 和 uint Count
- Multiple Position Binder:将变换列表的位置绑定到 Texture2D AttributeMap 和 uint Count
- 输入
- Axis:将输入轴的 float 值绑定到 float 属性
- Button:将按钮按下状态的 bool 值绑定到 bool 属性
- Key:将键盘键按下状态的 bool 值绑定到 bool 属性
- Mouse:将鼠标的一般值(Position、Velocity、Clicks)绑定到公开的属性
- Touch:将触摸输入(Position、Velocity)的输入值绑定到公开的属性
- Utility
- Light:将光属性(Color、Brightness、Radius)绑定到公开的属性
- Plane:将平面属性(Position、Normal)绑定到公开的属性
- Terrain:将地形属性(Size、Height Map)绑定到公开的属性
- Transform
- Position:将游戏对象位置绑定到矢量公开属性
- Position (previous):将以前的游戏对象位置绑定到矢量公开属性
- Transform:将游戏对象变换绑定到变换公开属性
- Velocity:将游戏对象速度绑定到矢量公开属性
- Physics
- Raycast:执行物理射线投射并将其结果值(hasHit、Position、Normal)绑定到公开属性。
- Collider
- Sphere:将 Sphere Collider 的属性绑定到 Sphere 的公开属性。
- UI
- Dropdown:将 Dropdown 的索引绑定到 uint 公开属性
- Slider:将浮动滑动条的值绑定到 uint 公开属性
- Toggle:将切换的 bool 值绑定到 bool 公开属性。
编写属性绑定器
您可以通过向项目添加新的 C# 类并扩展“UnityEngine.VFX.Utility.VFXBinderBase”类,来编写属性绑定器。
扩展“VFXBinderBase”类需要您实现以下方法:
*“bool IsValid (VisualEffect component)”:一种验证可以进行绑定的方法。如果此方法返回 true,VFX 属性绑定器组件将只执行“UpdateBinding()”。您需要在此方法中实现所有检查,以确定绑定是否 *“void UpdateBinding (VisualEffect component)”:当“IsValid”返回 true 时应用绑定的方法。
示例代码
下面的示例展示了一个简单的属性绑定器,它将一个 float 属性值设置为当前游戏对象和另一个(目标)游戏对象之间的距离。
使用 UnityEngine;
使用UnityEngine.VFX;
使用UnityEngine.VFX.Utility;
// VFXBinder 属性会将此类填充到属性绑定的添加菜单中。
[视觉特效绑定器("转换/距离")]
//该类需要扩展 VFXBinderBase
公共类距离绑定器:VFXBinderBase
{
// VFXPropertyBinding 属性允许使用特定的
//填充对象的 VisualEffect 属性的属性抽屉
//某种类型。
[ VFXPropertyBinding("System.Single")]
public ExposedProperty distanceProperty;
公共转换目标;
// IsValid 方法需要执行检查并返回如果绑定
//可以实现。
public override bool IsValid(VisualEffect 组件)
{
返回目标 != null&&component.HasFloat(距离属性);
}
// UpdateBinding 方法是您执行绑定的地方,
//通过假设它是有效的。仅当 IsValid 返回 true 时,
//才会调用此方法。
public override void UpdateBinding(VisualEffect component)
{
component.SetFloat(distanceProperty, Vector3.Distance(transform.position, target.position));
}
}```