public DefaultCommunicationService(ICommunicationServiceConfig config, IPoolableObjectFactory<IMessageSenderChannel> senderChannelFactory, IPoolableObjectFactory<IMessageReceiverChannel> receiverChannelFactory, string name = "DefaultCommunicationService", Int32 instanceNum = 1) : base(name, instanceNum) { var senderChannelPoolConfig = new ObjectPoolConfig<IMessageSenderChannel>.Builder() { SetValidateBeforeBorrow = true, SetCapacity = config.TotalSenderChannels, SetMaximumObjectsActiveOnStartup = config.TotalSenderChannels, Factory = senderChannelFactory }.Build(); _senderChannelPool = new DefaultMessageSenderChannelPool(senderChannelPoolConfig); var receiverChannelPoolConfig = new ObjectPoolConfig<IMessageReceiverChannel>.Builder() { SetCapacity = config.TotalReceiverChannels, SetMaximumObjectsActiveOnStartup = config.TotalReceiverChannels, SetValidateBeforeBorrow = true, Factory = receiverChannelFactory }.Build(); _receiverChannelPool = new DefaultMessageReceiverChannelPool( receiverChannelPoolConfig, config.UniqueResponseTopic); }
/// <summary> /// 根据配置生成对象 /// </summary> /// <param name="config">配置信息</param> private void GenerateObject(ObjectPoolConfig config) { if (listDictionary == null) { return; } //配置信息 string key = config.Key; int count = config.Count; GameObject target = config.Target; //放置位置 GameObject root = new GameObject(key + "_Clone"); root.transform.parent = allRoot; //生成对象 ObjectList list = new ObjectList(root.transform, target); for (int i = 0; i < count; i++) { GameObject buff = GameObject.Instantiate(target, root.transform); buff.gameObject.SetActive(false); list.CloseList.Add(buff); } listDictionary.Add(key, list); }
IObjectPool <PoolManagedBehaviour> CreatePool(int numberOfInstances) { var go = new GameObject(); PoolManagedBehaviour prefab = go.AddComponent <TestBehaviour>(); var config = new ObjectPoolConfig(numberOfInstances, Mathf.Max(numberOfInstances, 1)); return(base.CreatePool(prefab, config)); }
/// <summary> /// 构造函数,实例化对象池 /// </summary> /// <param name="configs"></param> public ObjectPool(params ObjectPoolConfig[] configs) { listDictionary = new Dictionary <string, ObjectList>(); allRoot = new GameObject("ObjPool_Clone").transform; for (int i = 0; i < configs.Length; i++) { ObjectPoolConfig config = configs[i]; GenerateObject(config); } }
public void GivenIHaveCreatedAPoolWithACapacityOfAndAvailableOnStartup(int p0, int p1) { _factory = new DummyPoolableObjectFactory(); var config = new ObjectPoolConfig<DummyPoolableObject>.Builder { Factory = _factory, SetCapacity = p0, SetMaximumObjectsActiveOnStartup = p1, SetValidateBeforeBorrow = true } .Build(); _objectPool = new DummyObjectPool(config); }
IObjectPool <EventFunctionsReceiver> CreatePool(bool prefabEnable, int numberOfInstances, bool needPreactivation) { var prefab = Resources.Load("EventFunctionsReceiver") as GameObject; prefab.gameObject.SetActive(prefabEnable); var component = prefab.GetComponent <EventFunctionsReceiver>(); var config = new ObjectPoolConfig( numberOfInstances: numberOfInstances, createCountPerFrame: numberOfInstances, needPreactivation: needPreactivation ); return(base.CreatePool(component, config)); }
IEnumerator Start() { SetUpKeyController(); var config = new ObjectPoolConfig( numberOfInstances: numberOfInstances, createCountPerFrame: 1, needPreactivation: needPreactivation ); var objectPool = new ObjectPoolImpl(id, prefab, config); ObjectPoolManager.Instance.RegisterPool(id, objectPool); yield return(ObjectPoolManager.Instance.PreloadAsync().ToYieldInstruction()); yield return(ObjectPoolManager.Instance.PreactivateAsync().ToYieldInstruction()); Debug.Log("OnLoaded"); }
protected IObjectPool <T> CreatePool <T>(T prefab, ObjectPoolConfig config) where T : PoolManagedBehaviour { var objectPool = new ObjectPoolImpl(IdGenerator.Generate(), prefab, config, hierarchyParent); return(new ObjectPoolWrapper <T>(objectPool)); }