데이터 인풋 감시자
종종 데이터 인풋의 값이 변경될 때 이를 알아야 할 경우가 있어요. 예를 들어, 다음 코드에서 사용자가 데이터 폴더의 MyPluginFiles 디렉토리에서 파일을 선택하도록 하려면:
[DataInput]
[AutoCompleteList(nameof(AutoCompletePluginFiles), forceSelection: true)]
public string SelectedFile;
protected async UniTask<AutoCompleteList> AutoCompletePluginFiles() {
return AutoCompleteList.Single(Context.PersistentDataManager.GetFileEntries("MyPluginFiles").Select(it => new AutoCompleteEntry {
label = it.fileName,
value = it.path
}));
}
사용자가 새로운 파일을 선택했을 때 이를 알 수 있으면 좋겠죠. 가장 단순한 방법은 SelectedFile의 값을 매 프레임마다 확인하는 것이지만, 이는 비효율적이고 번거로워요. 대신 OnCreate()에서 감시자를 등록할 수 있어요::
protected override void OnCreate() {
base.OnCreate();
Watch<string>(nameof(SelectedFile), OnSelectedFileChanged);
}
protected void OnSelectedFileChanged(string from, string to) {
if (to == null) {
// The user has cleared the selected file
}
// More logic to handle the file change
}
다른 엔티티의 데이터 인풋을 감시하고 싶다면 Watch<T>(Entity otherEntity, string dataInputKey, Action<T, T> onChange, bool deep = true) 메서드를 사용할 수 있어요.
팁
감시자는 엔티티가 삭제될 때 자동으로 등록 해제돼요.