/// <summary> /// 将TweenOperation与目标gameObject的生命周期进行绑定, 通过BehaviourBindSetting设置在不同的回调函数执行不同的行为。 /// <para>注意: 当一个go首次被绑定时,会有创建MonoBehaviour的开销。所以不宜大量频繁的往不同的gameObject进行Bind操作。</para> /// <para>通常来说,一个比较好的方式是:在一个Scene场景创建一个通用的gameObject作为绑定目标,来处理这个场景里所有动画。例如,场景关闭时,暂停所有Tween动画,场景销毁时,销毁所有动画</para> /// </summary> public static TweenOperation Bind(this TweenOperation operation, GameObject go, BehaviourBindSetting setting) { var b = go.GetComponent <TweenBehaviourBinding>(); if (!b) { b = go.AddComponent <TweenBehaviourBinding>(); } b.Bind(operation, setting); return(operation); }
public void Bind(TweenOperation operation, BehaviourBindSetting setting) { RemoveAllCompletedOperations(); if (setting.behaviourOnEnable != BehaviourType.None) { var item = new OperationItem() { behaviour = setting.behaviourOnEnable, operation = operation }; if (_processingEnable) { AddItemToList(ref item, _enableBehaviours); } else { var completed = false; if (this.isActiveAndEnabled) { //if current is enabled, do behaviour immediately completed = ProcessOperationItem(ref item); } if (!completed) { AddItemToList(ref item, _enableBehaviours); } } } if (setting.behaviourOnDisable != BehaviourType.None) { var item = new OperationItem() { behaviour = setting.behaviourOnDisable, operation = operation }; if (_processingDisable) { AddItemToList(ref item, _disableBehaviours); } else { var completed = false; if (!this.isActiveAndEnabled) { //if current is disabled, do behaviour immediately. completed = ProcessOperationItem(ref item); } if (!completed) { AddItemToList(ref item, _disableBehaviours); } } } if (setting.behaviourOnDestroy != BehaviourType.None) { var item = new OperationItem() { behaviour = setting.behaviourOnDestroy, operation = operation }; if (this == null) { //already destroyed ProcessOperationItem(ref item); } else { AddItemToList(ref item, _destroyBehaviours); } } }