프로퍼티 바인더는 Visual Effect 컴포넌트***를 사용하여 게임 오브젝트에 연결할 수 있는 C# 동작입니다. 이러한 동작을 사용하여 씬 또는 게임플레이 값과 이 시각 효과 인스턴스의 노출 프로퍼티 간에 연결할 수 있습니다.
예를 들어 구체 바인더는 씬에 연결된 스피어 콜라이더의 값을 사용하여 구체 노출 프로퍼티의 포지션과 반지름을 자동으로 설정할 수 있습니다.
프로퍼티 바인더 추가
VFX 프로퍼티 바인더라는 일반적인 MonoBehaviour를 통해 프로퍼티 바인더를 추가할 수 있습니다. 이 동작을 통해 하나 이상의 프로퍼티 바인딩을 사용할 수 있습니다. 각 프로퍼티 바인딩은 노출 프로퍼티와 런타임 또는 씬 요소 간의 관계를 생성하는 역할을 담당합니다.
또는 Add Component 메뉴를 통해 프로퍼티 바인더를 직접 추가할 수도 있습니다. VFX Property Binder 컴포넌트가 없을 때 생성됩니다.
빌트인 프로퍼티 바인더
비주얼 이펙트 그래프 패키지는 다음과 같은 빌트인 프로퍼티 바인더와 함께 제공됩니다.
- 오디오
- Audio Spectrum to AttributeMap: 오디오 스펙트럼을 속성 맵에 베이크하고, Texture2D 및 uint Count 프로퍼티에 바인딩합니다.
- 게임 오브젝트
- Enabled: 게임 오브젝트의 Enabled 플래그를 부울 프로퍼티에 바인딩합니다.
- 포인트 캐시
- Hierarchy to AttributeMap: Texture2Ds AttributeMaps 및 uint Count에 대한 트랜스폼 계층 구조의 타겟 포지션을 바인딩합니다.
- Multiple Position Binder: 트랜스폼 리스트의 포지션을 Texture2D AttributeMap 및 uint Count에 바인딩합니다.
- 입력
- Axis: 입력 축의 플로트 값을 플로트 프로퍼티에 바인딩합니다.
- Button: 버튼 누름 상태의 부울 값을 부울 프로퍼티에 바인딩합니다.
- Key: 키보드 키 누름 상태의 부울 값을 부울 프로퍼티에 바인딩합니다.
- Mouse: 마우스의 일반적인 값(포지션, 속도, 클릭)을 노출 프로퍼티에 바인딩합니다.
- Touch: 터치 입력의 입력 값(포지션, 속도)을 노출 프로퍼티에 바인딩합니다.
- 유틸리티
- Light: 광원 프로퍼티(컬러, 밝기, 반지름)를 노출 프로퍼티에 바인딩합니다.
- Plane: 평면 프로퍼티(포지션, 노멀)를 노출 프로퍼티에 바인딩합니다.
- Terrain: 터레인 프로퍼티(크기, 하이트맵)를 노출 프로퍼티에 바인딩합니다.
- 트랜스폼
- Position: 게임 오브젝트 포지션을 벡터 노출 프로퍼티에 바인딩합니다.
- Position (previous): 이전 게임 오브젝트 포지션을 벡터 노출 프로퍼티에 바인딩합니다.
- Transform: 게임 오브젝트 트랜스폼을 트랜스폼 노출 프로퍼티에 바인딩합니다.
- Velocity: 게임 오브젝트 속도를 벡터 노출 프로퍼티에 바인딩합니다.
- 물리
- Raycast: 물리 레이캐스트를 수행하고, 해당 결과 값(hasHit, 포지션, 노멀)을 노출 프로퍼티에 바인딩합니다.
- 콜라이더
- Sphere: 스피어 콜라이더의 프로퍼티를 구체 노출 프로퍼티에 바인딩합니다.
- UI
- Dropdown: 드롭다운의 인덱스를 uint 노출 프로퍼티에 바인딩합니다.
- Slider: 플로트 슬라이더의 값을 uint 노출 프로퍼티에 바인딩합니다.
- Toggle: 토글의 부울 값을 부울 노출 프로퍼티에 바인딩합니다.
프로퍼티 바인더 작성
프로젝트에 새 C# 클래스를 추가하고 UnityEngine.VFX.Utility.VFXBinderBase
클래스를 확장하여 프로퍼티 바인더를 작성할 수 있습니다.
VFXBinderBase
클래스를 확장하려면 다음 메서드를 구현해야 합니다.
bool IsValid(VisualEffect component)
: 바인딩이 가능한지 검증하는 메서드입니다. VFX Property Binder 컴포넌트는 이 메서드가 true를 반환하는 경우에만UpdateBinding()
을 수행합니다. 바인딩 여부를 확인하려면 이 메서드에서 모든 검사를 구현해야 합니다.void UpdateBinding(VisualEffect component)
:IsValid
가 true를 반환하는 경우 바인딩을 적용하는 메서드입니다.
예제 코드
다음 예제에서는 플로트 프로퍼티 값을 현재 게임 오브젝트와 다른(타겟) 게임 오브젝트 사이의 거리로 설정하는 간단한 프로퍼티 바인더를 보여줍니다.
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));
}
}```