导入R3,简单实现数据绑定UI,以及双向绑定
This commit is contained in:
@@ -3,7 +3,11 @@
|
||||
"rootNamespace": "",
|
||||
"references": [
|
||||
"GUID:921b262766d31374c8fd93ad67954b9c",
|
||||
"GUID:63f032f8696ad5b4e99c26f7a9f89060"
|
||||
"GUID:63f032f8696ad5b4e99c26f7a9f89060",
|
||||
"GUID:77221876cc6b8244180b96e320b1bcd4",
|
||||
"GUID:6055be8ebefd69e48b49212b09b47b2f",
|
||||
"GUID:f51ebe6a0ceec4240a699833d6309b23",
|
||||
"GUID:e34a5702dd353724aa315fb8011f08c3"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
|
||||
@@ -1,11 +1,20 @@
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using YooAsset;
|
||||
|
||||
public class GameStart : MonoBehaviour
|
||||
{
|
||||
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
||||
void Start()
|
||||
async void Start()
|
||||
{
|
||||
Debug.Log("GameStart");
|
||||
GamePreload.Inst.Test("call by GameStart");
|
||||
await LoadSimpleR3Test();
|
||||
}
|
||||
async UniTask LoadSimpleR3Test()
|
||||
{
|
||||
AssetHandle handle = YooAssets.LoadAssetAsync<GameObject>("SimpleR3Test");
|
||||
await handle;
|
||||
GameObject.Instantiate(handle.AssetObject, MainUICanvas.Inst.Medium);
|
||||
}
|
||||
}
|
||||
|
||||
19
Assets/GameScripts/Main/SimpleR3Test.cs
Normal file
19
Assets/GameScripts/Main/SimpleR3Test.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using R3;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class SimpleR3Test : MonoBehaviour
|
||||
{
|
||||
BindableReactiveProperty<float> value = new(0);
|
||||
|
||||
public InputField inputField;
|
||||
public Scrollbar scrollbar;
|
||||
|
||||
|
||||
void Start()
|
||||
{
|
||||
value.BindToScrollbar(scrollbar).AddTo(this);
|
||||
value.BindToInputField(inputField).AddTo(this);
|
||||
}
|
||||
}
|
||||
2
Assets/GameScripts/Main/SimpleR3Test.cs.meta
Normal file
2
Assets/GameScripts/Main/SimpleR3Test.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5ab3d77b09181e94e9d6303d5dd80174
|
||||
51
Assets/GameScripts/Main/UnityUIBindings.cs
Normal file
51
Assets/GameScripts/Main/UnityUIBindings.cs
Normal file
@@ -0,0 +1,51 @@
|
||||
using R3;
|
||||
using System;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace R3
|
||||
{
|
||||
public static class UnityUIBindings
|
||||
{
|
||||
public static IDisposable SubscribeToScrollbar(this Observable<float> source, Scrollbar scrollbar)
|
||||
{
|
||||
return source.Subscribe(scrollbar, static (x, s) => s.value = x);
|
||||
}
|
||||
public static IDisposable SubscribeToText(this Observable<float> source, InputField inputField)
|
||||
{
|
||||
return source.Subscribe(inputField, static (x, t) => t.text = x.ToString());
|
||||
}
|
||||
public static IDisposable BindToScrollbar(this BindableReactiveProperty<float> source, Scrollbar scrollbar)
|
||||
{
|
||||
var disposable = new CompositeDisposable();
|
||||
|
||||
// 值 → Scrollbar
|
||||
source.SubscribeToScrollbar(scrollbar).AddTo(disposable);
|
||||
|
||||
// Scrollbar → 值
|
||||
scrollbar.OnValueChangedAsObservable().Subscribe(_value => { source.Value = _value; }).AddTo(disposable);
|
||||
|
||||
return disposable;
|
||||
}
|
||||
public static IDisposable BindToInputField(this BindableReactiveProperty<float> source, InputField inputField)
|
||||
{
|
||||
var disposable = new CompositeDisposable();
|
||||
|
||||
// 值 → InputField
|
||||
source.SubscribeToText(inputField).AddTo(disposable);
|
||||
|
||||
// InputField → 值
|
||||
inputField.OnValueChangedAsObservable().Subscribe(_value =>
|
||||
{
|
||||
float result;
|
||||
if (float.TryParse(_value,out result))
|
||||
source.Value = result;
|
||||
}).AddTo(disposable);
|
||||
|
||||
return disposable;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
2
Assets/GameScripts/Main/UnityUIBindings.cs.meta
Normal file
2
Assets/GameScripts/Main/UnityUIBindings.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f37692bbbf2a11c48b4cb9f3a32a4a77
|
||||
@@ -10,7 +10,7 @@ public class PatchWindow : MonoBehaviour
|
||||
public VideoPlayer video;
|
||||
private void Awake()
|
||||
{
|
||||
video.targetCamera = GameManager.Inst.UICamera;
|
||||
video.targetCamera = MainUICanvas.Inst.UICamera;
|
||||
PatchEvent.OnStatusUpdate += OnStatusUpdate;
|
||||
PatchEvent.OnProgressUpdate += OnProgressUpdate;
|
||||
PatchEvent.OnDownloadSizeUpdate += OnDownloadSizeUpdate;
|
||||
|
||||
Reference in New Issue
Block a user