本文首发于“洪流学堂”公众号。
洪流学堂,让你快人几步
有一个开源插件是我开发每个Unity3d项目必用的,它的名字是UniRx
在assetstore中搜索UniRx即可
开源地址https://github.com/neuecc/UniRx
今天我们举个例子,看看UniRx如何提高你的代码质量以及开发效率
计时器
我们的需求是:在10秒后执行一段代码,如果直接写会怎么写呢
刚接触U3D时可能会这么写
using UnityEngine;
public class UpdateBasedTimer : MonoBehaviour
{
private float _startTime;
void Start()
{
_startTime = Time.time;
}
void Update()
{
if (Time.time - _startTime > 10)
{
DoSomething();
// 避免再次执行
_startTime = float.MaxValue;
}
}
void DoSomething()
{
Debug.Log("DoSomething");
}
}
后来学习了协程,代码就变成了这样
using System;
using System.Collections;
using UnityEngine;
public class CoroutineBasedTimer : MonoBehaviour
{
void Start()
{
StartCoroutine(Timer(10, DoSomething));
}
IEnumerator Timer(float seconds, Action callback)
{
yield return new WaitForSeconds(seconds);
callback();
}
void DoSomething()
{
Debug.Log("DoSomething");
}
}
用UniRx,你只需要这样
Observable.Timer(TimeSpan.FromSeconds(10)).Subscribe(_ =>
{
Debug.Log("DoSomething");
});
还有哪些?
- 异步网络操作
- 多线程
- MonoBehaviour触发器
- 基于帧数/时间的操作
- uGUI集成
- 实现MVP设计模式
- 高效的消息系统
- 对象池
- ……
每一项都可以帮你在开发中节省大把的时间,提高代码的质量,快来试试吧!
如果你对UniRx感兴趣,请在下方留言,洪流学堂会根据热度适时推出UniRx更为详细的教程或视频课程
交流群:492325637
洪流学堂,让你快人几步
现在加入社群,还可获得价值499元的一年Unity3d学习路线定制服务。