廊坊哪里有做网站建设的wordpress 页面是什么意思

张小明 2026/1/19 22:24:05
廊坊哪里有做网站建设的,wordpress 页面是什么意思,做电子签章登录哪个网站,武进建设局网站首页一、Observable 概述1.1 什么是 ObservableObservable 是 UniRx 中的核心概念#xff0c;代表一个可观察的数据流。它可以发射多个值#xff08;异步或同步#xff09;#xff0c;订阅者可以监听这些值。1.2 Observable 的特点可观察#xff1a;数据源可以被订阅可组合代表一个可观察的数据流。它可以发射多个值异步或同步订阅者可以监听这些值。1.2 Observable 的特点可观察数据源可以被订阅可组合多个 Observable 可以组合成新的数据流可操作支持各种操作符进行数据转换可订阅允许一个或多个订阅者监听二、创建 Observable 的常用方法2.1 基础创建方法csharp// 1. 创建一个发射单个值的 Observable Observable.Return(Hello) .Subscribe(msg Debug.Log(msg)); // 2. 创建一个空的 Observable立即完成 Observable.Emptyint() .Subscribe( onNext: x Debug.Log(x), // 不会执行 onCompleted: () Debug.Log(Completed) // 立即执行 ); // 3. 创建一个永不结束的 Observable Observable.Neverint(); // 4. 创建一个立即抛出错误的 Observable Observable.Throwint(new Exception(Error));2.2 从 Unity 事件创建csharp// 1. 从 Update 事件创建 Observable.EveryUpdate() .Subscribe(_ { // 每帧执行 }); // 2. 从 FixedUpdate 创建 Observable.EveryFixedUpdate() .Subscribe(_ { // 每个固定物理帧执行 }); // 3. 从协程创建 Observable.FromCoroutineint(observer CountCoroutine(observer, 5)) .Subscribe(count Debug.Log($Count: {count})); IEnumerator CountCoroutine(IObserverint observer, int count) { for (int i 0; i count; i) { observer.OnNext(i); yield return new WaitForSeconds(1); } observer.OnCompleted(); } // 4. 从 UnityEvent 创建 public UnityEvent myEvent; myEvent.AsObservable() .Subscribe(_ Debug.Log(Event triggered));2.3 从异步操作创建csharp// 1. 从 Task 创建 Observable.FromAsync(() SomeAsyncMethod()) .Subscribe(result Debug.Log(result)); async Taskstring SomeAsyncMethod() { await Task.Delay(1000); return Result; } // 2. 从 WWW/UnityWebRequest 创建 ObservableWWW.Get(http://example.com) .Subscribe( result Debug.Log(result), error Debug.LogError(error) );2.4 定时器相关csharp// 1. 定时器 Observable.Timer(TimeSpan.FromSeconds(1)) .Subscribe(_ Debug.Log(1秒后执行)); // 2. 间隔执行 Observable.Interval(TimeSpan.FromSeconds(1)) .Subscribe(tick Debug.Log($Tick: {tick})); // 3. 延迟执行 Observable.Start(() Debug.Log(Start)) .Delay(TimeSpan.FromSeconds(1)) .Subscribe();三、常用操作符3.1 转换操作符csharp// 1. Select - 映射转换 Observable.Range(1, 5) .Select(x x * 2) // 每个值乘以2 .Subscribe(x Debug.Log(x)); // 2, 4, 6, 8, 10 // 2. Where - 过滤 Observable.Range(1, 10) .Where(x x % 2 0) // 只保留偶数 .Subscribe(x Debug.Log(x)); // 2, 4, 6, 8, 10 // 3. Cast - 类型转换 ListGameObject objects new ListGameObject(); objects.AsObservable() .CastGameObject, Component() .Subscribe(component { /* 处理 */ });3.2 组合操作符csharp// 1. Merge - 合并多个流 var stream1 Observable.Interval(TimeSpan.FromSeconds(1)).Select(x $A{x}); var stream2 Observable.Interval(TimeSpan.FromSeconds(2)).Select(x $B{x}); stream1.Merge(stream2) .Subscribe(msg Debug.Log(msg)); // 2. Zip - 成对组合 Observable.Range(1, 3) .Zip(Observable.Range(10, 3), (a, b) ${a}-{b}) .Subscribe(pair Debug.Log(pair)); // 1-10, 2-11, 3-12 // 3. CombineLatest - 任意一个发射时使用最新值组合 var inputX GetAxisStream(Horizontal); var inputY GetAxisStream(Vertical); inputX.CombineLatest(inputY, (x, y) new Vector2(x, y)) .Subscribe(vector Move(vector)); // 4. Concat - 顺序连接 Observable.Return(First) .Concat(Observable.Return(Second)) .Subscribe(msg Debug.Log(msg)); // First, 然后 Second3.3 时间相关操作符csharp// 1. Throttle - 防抖一段时间内只取最后一个 inputField.OnValueChangedAsObservable() .Throttle(TimeSpan.FromSeconds(0.5)) .Subscribe(text Search(text)); // 2. Sample - 采样定期取最新值 Observable.EveryUpdate() .Sample(TimeSpan.FromSeconds(0.1)) .Subscribe(_ UpdatePer100ms()); // 3. Buffer - 缓冲 Observable.Interval(TimeSpan.FromSeconds(0.2)) .Buffer(TimeSpan.FromSeconds(1)) .Subscribe(buffer { Debug.Log($1秒内收到了 {buffer.Count} 个值); }); // 4. Timeout - 超时处理 GetDataFromServer() .Timeout(TimeSpan.FromSeconds(5)) .Subscribe( data Process(data), error { if (error is TimeoutException) Debug.Log(请求超时); } );3.4 错误处理操作符csharp// 1. Catch - 捕获错误并切换流 Observable.Throwint(new Exception(Error)) .Catch((Exception ex) { Debug.LogError(ex.Message); return Observable.Return(-1); }) .Subscribe(x Debug.Log(x)); // 输出 -1 // 2. Retry - 重试 GetNetworkData() .Retry(3) // 最多重试3次 .Subscribe( data Debug.Log(data), error Debug.LogError($失败: {error}) ); // 3. Finally - 最终执行 Observable.Createint(observer { // 创建资源 return Disposable.Create(() { // 清理资源 }); }) .Finally(() Debug.Log(最终清理)) .Subscribe();四、实际应用示例4.1 输入处理csharppublic class InputHandler : MonoBehaviour { void Start() { // 组合按键检测 var jumpStream Observable.EveryUpdate() .Where(_ Input.GetButtonDown(Jump)); var attackStream Observable.EveryUpdate() .Where(_ Input.GetMouseButtonDown(0)); jumpStream.Subscribe(_ Jump()); attackStream.Subscribe(_ Attack()); // 鼠标拖拽 var dragStream Observable.EveryUpdate() .Where(_ Input.GetMouseButton(0)) .Select(_ Input.mousePosition) .Pairwise() // 获取前后两个值 .Select(pair pair.Current - pair.Previous); dragStream.Subscribe(delta DragObject(delta)); } }4.2 UI 交互csharppublic class UIHandler : MonoBehaviour { public Button button; public InputField inputField; public Slider slider; public Toggle toggle; void Start() { // 按钮点击 button.OnClickAsObservable() .Subscribe(_ OnButtonClick()); // 输入框实时搜索 inputField.OnValueChangedAsObservable() .Throttle(TimeSpan.FromSeconds(0.3)) .Where(text text.Length 2) .DistinctUntilChanged() .Subscribe(Search); // 滑块值变化 slider.OnValueChangedAsObservable() .Subscribe(value UpdateValue(value)); // 开关状态 toggle.OnValueChangedAsObservable() .Subscribe(isOn ToggleFeature(isOn)); } }4.3 游戏逻辑csharppublic class HealthSystem : MonoBehaviour { public IntReactiveProperty currentHealth new IntReactiveProperty(100); public IObservablebool IsDead { get; private set; } public IObservablefloat HealthPercentage { get; private set; } void Start() { // 计算是否死亡 IsDead currentHealth .Select(health health 0) .DistinctUntilChanged(); // 计算血量百分比 HealthPercentage currentHealth .Select(health health / 100f); // 监听死亡事件 IsDead.Where(isDead isDead) .Subscribe(_ OnDeath()); // 低血量警告 currentHealth .Where(health health 30 health 0) .Subscribe(_ ShowLowHealthWarning()); } public void TakeDamage(int damage) { currentHealth.Value - damage; } }4.4 网络请求csharppublic class NetworkManager : MonoBehaviour { public IObservablestring DownloadData(string url) { return ObservableWWW.Get(url) .Timeout(TimeSpan.FromSeconds(10)) .Retry(3) .ObserveOnMainThread(); // 在主线程处理结果 } void LoadData() { DownloadData(http://api.example.com/data) .Subscribe( data { // 处理数据 ProcessData(JsonUtility.FromJsonData(data)); }, error { // 错误处理 if (error is TimeoutException) ShowMessage(请求超时); else ShowMessage(网络错误); } ); } }五、高级技巧5.1 自定义 Observablecsharppublic static class CustomObservables { // 自定义 Observable 扩展方法 public static IObservableVector3 MouseDragAsObservable(this Component component) { return Observable.CreateVector3(observer { bool isDragging false; Vector3 startPos Vector3.zero; var mouseDown Observable.EveryUpdate() .Where(_ Input.GetMouseButtonDown(0)) .Subscribe(_ { isDragging true; startPos Input.mousePosition; }); var mouseUp Observable.EveryUpdate() .Where(_ Input.GetMouseButtonUp(0)) .Subscribe(_ { isDragging false; }); var mouseDrag Observable.EveryUpdate() .Where(_ isDragging) .Select(_ Input.mousePosition - startPos) .Subscribe(observer); return Disposable.Create(() { mouseDown.Dispose(); mouseUp.Dispose(); mouseDrag.Dispose(); }); }); } }5.2 内存管理csharppublic class DisposableExample : MonoBehaviour { private CompositeDisposable disposables new CompositeDisposable(); void Start() { // 添加到 CompositeDisposable 统一管理 Observable.Interval(TimeSpan.FromSeconds(1)) .Subscribe(_ Debug.Log(Tick)) .AddTo(disposables); Observable.EveryUpdate() .Subscribe(_ { /* 更新逻辑 */ }) .AddTo(disposables); } void OnDestroy() { // 统一释放所有订阅 disposables.Dispose(); } }六、性能考虑及时释放订阅避免内存泄漏合理使用 Throttle/Sample减少不必要的处理避免频繁创建 Observable考虑重用使用合适的调度器注意线程切换开销总结UniRx 的 Observable 提供了强大的响应式编程能力特别适合处理 Unity 中的异步操作和事件流。通过合理使用各种操作符可以写出更简洁、可维护的代码。关键是要理解数据流的概念并掌握如何组合和转换这些流来满足不同的需求。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站开发 翻译郑州网约车从业资格证报名

LobeChat能否训练微调模型?结合前端的闭环训练 在企业级AI助手日益普及的今天,一个现实问题摆在开发者面前:我们部署了一个基于本地大模型的聊天系统,用户每天都在使用,反馈也不断产生——但模型却始终“原地踏步”&am…

张小明 2026/1/17 5:57:10 网站建设

网站控制面板地址网站开发手机号能在页面上显示吗

你是否曾经发现电脑运行速度变慢,系统资源被莫名其妙地占用?很多时候,这都源于微软OneDrive在后台悄无声息地运行。作为Windows 10深度集成的云存储服务,OneDrive往往成为系统性能的潜在影响因素。今天,我将为你介绍一…

张小明 2026/1/17 22:40:48 网站建设

阿克苏市建设局网站招商平台

NS模拟器自动化部署工具深度解析 【免费下载链接】ns-emu-tools 一个用于安装/更新 NS 模拟器的工具 项目地址: https://gitcode.com/gh_mirrors/ns/ns-emu-tools 还在为复杂的NS模拟器安装过程而头疼吗?ns-emu-tools作为一款专业的自动化部署工具&#xff0…

张小明 2026/1/17 22:40:45 网站建设

宁德住房和城乡建设部网站端州网站建设

大气层整合包系统:从入门到精通的完全指南 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 大气层整合包系统为Nintendo Switch用户带来了前所未有的定制化体验。这套稳定版系统…

张小明 2026/1/17 22:40:47 网站建设

linux空间做网站wordpress开通多站点好处

在现代云计算环境中,如何有效利用GPU资源是一个关键问题,尤其是当涉及到成本控制和资源优化时。本文将探讨如何在Azure Kubernetes Service (AKS) 中,通过配置节点池和调整工作负载的调度策略,优先使用Azure Spot实例以优化GPU资源的使用。 节点池配置 在Azure Kubernete…

张小明 2026/1/17 22:40:46 网站建设

怎么做类似淘宝网站wordpress 中字体插件

GetSubtitles自动化字幕获取终极指南:3分钟完成批量字幕下载 【免费下载链接】GetSubtitles 一步下载匹配字幕 项目地址: https://gitcode.com/gh_mirrors/ge/GetSubtitles 在当今多语言媒体消费时代,为视频文件寻找匹配的字幕已成为许多用户的刚…

张小明 2026/1/17 22:40:51 网站建设