看到这里,总算明白strange怎么用了
看到这里,总算明白strange怎么用了
刘刚讲的视频花一小时看完了,讲的不错啊,搞项目时,里面有不少东西可以借鉴;
刘刚讲的视频花一小时看完了,讲的不错啊,搞项目时,里面有不少东西可以借鉴;
使用observable.Start(()=>{})可以启用线程
由于协程和线程都有oncomplate,所以都可以使用whenAll
observableOnMianThread,意思是把whenall结果转到主线程上,subscribe的回调就可以使用unity的API了
everyupdata()没有oncomplate生命周期,所以无法使用回调
使用unitx开启协程
Observable.FromCoroutine(_=>A());
留个记录,没继续往下看,老师的看不懂了,然后,然后,我自己写出来了第一节课中演示的功能。
优化代码如下,实测有效
public void ChangeBlenderShapeValue(string blenderShapeValue,float value)
{
if (!blenderShapeDatabase.ContainsKey(blenderShapeValue))
{
Debug.LogError("输入有误");
return;
}
BlenderShape blenderShape = blenderShapeDatabase[blenderShapeValue];
if (blenderShape.PositiveIndex < 0 && blenderShape.NegativeIndex < 0)
{
Debug.LogError("字典读取有误");
return;
}
if (blenderShape.PositiveIndex<0||blenderShape.NegativeIndex<0)
{
value = Mathf.Clamp(value, 0, 100);
Target.SetBlendShapeWeight(Mathf.Max(blenderShape.PositiveIndex, blenderShape.NegativeIndex),value);
}
else
{
value = Mathf.Clamp(value, -100, 100);
if (value>=0)
{
Target.SetBlendShapeWeight(blenderShape.PositiveIndex,value);
}
else
{
Target.SetBlendShapeWeight(blenderShape.NegativeIndex, -value);
}
}
observable支持转换为yield对象
IEnumerator Delay1Second(){
yield return Observable.Timer(TimeSpan.FromSeconds(1.0f)).ToYieldInstruction();
}
.select()是一个泛型,根据返回的值类型决定
unirx可以开启多条事件流,多个事件流可以通过merge进行事件流和并
button.interactable是一个布尔类型的值,设置为false则表示这个button不可以交互,即不可点击
reactiveproperty<>不能序列化
intReactiveproperty 可以进行序列化
drag事件需要成对出现有begindrag、drag、enddarg,否则会不生效
.first()获取第一个通过的事件,括号内可以添加条件进行过滤
.everyupdate()是一个事件源,每帧调用一次,会发送一个事件
Subscribe是事件接收者,接收everyupdate发送来的事件
.where()会把不符合括号内条件的事件过滤,符合则执行subscribe
事件本身可以是参数,但everyupdate本身没有参数,所以在where中不需要接收参数,括号内用_变量来表示不含参。
AddTo用于生命周期绑定,当这个函数的生命周期结束时就解绑删除
observable是一个事件流,可以调用unity的生命周期
单例(非线程安全)
private static PoolManager _instance;
public static PoolManager Instance{
get{
if(_instance==null){//判断是否已经创建过这个单例
_instance=new PoolManager();
}
return _instance;
}
}
private PoolManager(){}//单例的构造方法
public Init(){}
可以在StarCommand中初始化pool
创建配置文件不能直接new,需要使用
GameObjectPoolList poolList=ScriptableObject.CreateInstance<GameObjectPoolList>();
来创建
AssetDatabase.CreateAsset(pooList,"Assets/Framework/Resources/gameobjectpool.asset");
AssetDatabase.SaveAsset();
将配置文件保存至xxxx路径,使用saveAsset方法保存