/// <summary> /// 增加蒙皮信息 /// </summary> /// <param name="entity">要换装的实体</param> /// <param name="assetName">要换装的资源名称</param> public void AddSkinnedMesh(Entity entity, string assetName) { AvtarInfo avtarInfo = null; if (!m_AvtarInfos.TryGetValue(entity, out avtarInfo)) { avtarInfo = new AvtarInfo(entity, this); m_AvtarInfos.Add(entity, avtarInfo); } if (avtarInfo.HasSkinnedMesh(assetName)) { Log.Error("SkinnedMesh {0} is already added !", assetName); return; } AssetObject assetObject = m_AssetPool.Spawn(assetName); if (assetObject == null) { GameEntry.Resource.LoadAsset(assetName, typeof(UnityEngine.Object), Constant.AssetPriority.AvtarAsset, m_LoadAssetCallbacks, new LoadAvtarInfo(avtarInfo)); } else { InternalAddSkinnedMesh(avtarInfo, assetObject); } }
/// <summary> /// 设置图片 /// </summary> /// <param name="targetImage">目标图片</param> /// <param name="assetName">资源名称</param> /// <param name="setNativeSize">自适应大小</param> public void SetImage(Image targetImage, string assetName, bool setNativeSize) { AssetObject assetObject = m_AssetPool.Spawn(assetName); if (assetObject == null) { GameEntry.Resource.LoadAsset(assetName, typeof(UnityEngine.Object), Constant.AssetPriority.TextureAsset, m_LoadAssetCallbacks, new LoadTextureInfo(targetImage, setNativeSize)); } else { InternalSetImage(targetImage, assetObject, setNativeSize); } }
/// <summary> /// 打开界面 /// </summary> /// <param name="uiFormAssetName">界面资源名称</param> /// <param name="uiGroupName">界面组名称</param> /// <param name="priority">加载界面资源的优先级</param> /// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面</param> /// <param name="userData">用户自定义数据</param> /// <returns>界面的序列编号</returns> public int OpenUIForm(string uiFormAssetName, string uiGroupName, int priority, bool pauseCoveredUIForm, object userData) { if (string.IsNullOrEmpty(uiFormAssetName)) { throw new Exception("UI form asset name is invalid."); } if (string.IsNullOrEmpty(uiGroupName)) { throw new Exception("UI group name is invalid."); } UIGroup uiGroup = GetUIGroup(uiGroupName); if (uiGroup == null) { throw new Exception(TextUtil.Format("UI group '{0}' is not exist.", uiGroupName)); } int serialId = m_Serial++; UIFormInstanceObject uiFormInstanceObject = m_InstancePool.Spawn(uiFormAssetName); if (uiFormInstanceObject == null) { m_UIFormsBeingLoaded.Add(serialId, uiFormAssetName); GameEntry.Resource.LoadAsset(uiFormAssetName, typeof(GameObject), priority, m_LoadAssetCallbacks, new OpenUIFormInfo(serialId, uiGroup, pauseCoveredUIForm, userData)); } else { InternalOpenUIForm(serialId, uiFormAssetName, uiGroup, uiFormInstanceObject.Target, pauseCoveredUIForm, false, 0f, userData); } return(serialId); }
/// <summary> /// 打开界面。 /// </summary> /// <param name="uiFormTypeId">界面类型编号。</param> /// <param name="uiFormAssetName">界面资源名称。</param> /// <param name="uiGroupName">界面组名称。</param> /// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面。</param> /// <param name="userData">用户自定义数据。</param> public void OpenUIForm(int uiFormTypeId, string uiFormAssetName, string uiGroupName, bool pauseCoveredUIForm, object userData) { if (m_ResourceManager == null) { throw new GameFrameworkException("You must set resource manager first."); } if (m_UIFormHelper == null) { throw new GameFrameworkException("You must set UI form helper first."); } UIGroup uiGroup = GetUIGroup(uiGroupName) as UIGroup; if (uiGroup == null) { throw new GameFrameworkException(string.Format("UI group '{0}' is not exist.", uiGroupName)); } UIFormInstanceObject uiFormInstanceObject = m_InstancePool.Spawn(uiFormAssetName); if (uiFormInstanceObject == null) { m_ResourceManager.InstantiateAsset(uiFormAssetName, m_InstantiateAssetCallbacks, new OpenUIFormInfo(uiFormTypeId, uiGroup, pauseCoveredUIForm, userData)); return; } InternalOpenUIForm(uiFormTypeId, uiFormAssetName, uiGroup, uiFormInstanceObject.Target, pauseCoveredUIForm, false, 0f, userData); }
private void OnGUI() { if (GUILayout.Button("Click1")) { if (m_IObjectPoo01.CanSpawn("对象池01_对象1")) { Debug.Log((m_TempObj = m_IObjectPoo01.Spawn("对象池01_对象1").Target as GameObject).name); } } if (GUILayout.Button("Click2")) { m_IObjectPoo01.Unspawn(m_TempObj); } if (GUILayout.Button("Click3")) { m_Target = gameObject.Spawn <OPDemo>("对象池03_对象1", "对象1"); } if (GUILayout.Button("Click4")) { m_Target.Unspawn <OPDemo>("对象池03_对象1"); } }
/// <summary> /// 打开界面。 /// </summary> /// <param name="uiFormAssetName">界面资源名称。</param> /// <param name="uiGroupName">界面组名称。</param> /// <param name="uiGroupDepth">界面组深度</param> /// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面。</param> /// <param name="userData">用户自定义数据。</param> public void OpenUIForm(string uiFormAssetName, string uiGroupName, int uiGroupDepth, bool pauseCoveredUIForm, object userData) { Guard.Verify <ArgumentException>(m_UIFormHelper == null, "You must set UI form helper first."); Guard.NotEmptyOrNull(uiFormAssetName, "UI form asset name is invalid."); Guard.NotEmptyOrNull(uiGroupName, "UI group name is invalid."); UIGroup uiGroup = (UIGroup)GetUIGroup(uiGroupName); if (uiGroup == null) { uiGroup = (UIGroup)AddUIGroup(uiGroupName, uiGroupDepth); } if (HasUIForm(uiFormAssetName)) { return; } UIFormInstanceObject uiFormInstanceObject = m_InstancePool.Spawn(uiFormAssetName); if (uiFormInstanceObject == null) { // 把资源加载抽到这里,为后续异步加载资源与实例化分开处理 var uiFormInstance = m_UIFormHelper.InstantiateUIForm(ResourceUtils.Load(uiFormAssetName)); uiFormInstanceObject = new UIFormInstanceObject(uiFormAssetName, uiFormInstance, m_UIFormHelper); m_InstancePool.Register(uiFormInstanceObject, true); InnerOpenUIForm(uiFormAssetName, uiGroup, uiFormInstanceObject.Target, pauseCoveredUIForm, true, userData); } else { InnerOpenUIForm(uiFormAssetName, uiGroup, uiFormInstanceObject.Target, pauseCoveredUIForm, false, userData); } }
public int OpenUIForm(string uiFormAssetName, string uiGroupName, int priority, bool pauseCoveredUIForm, string luaRelativePath, object userData) { if (m_ResourceManager == null) { throw new GameFrameworkException("You must set resource manager first."); } if (m_UIFormHelper == null) { throw new GameFrameworkException("You must set UI form helper first."); } if (string.IsNullOrEmpty(uiFormAssetName)) { throw new GameFrameworkException("UI form asset name is invalid."); } if (string.IsNullOrEmpty(uiGroupName)) { throw new GameFrameworkException("UI group name is invalid."); } UIGroup uiGroup = (UIGroup)GetUIGroup(uiGroupName); if (uiGroup == null) { throw new GameFrameworkException(Utility.Text.Format("UI group '{0}' is not exist.", uiGroupName)); } int serialId = ++m_Serial; UIFormInstanceObject uiFormInstanceObject = m_InstancePool.Spawn(uiFormAssetName); if (uiFormInstanceObject == null) { m_UIFormsBeingLoaded.Add(serialId, uiFormAssetName); m_ResourceManager.LoadAsset(uiFormAssetName, priority, m_LoadAssetCallbacks, OpenUIFormInfo.Create(serialId, uiGroup, pauseCoveredUIForm, luaRelativePath, userData)); } else { InternalOpenUIForm(serialId, uiFormAssetName, uiGroup, uiFormInstanceObject.Target, pauseCoveredUIForm, false, 0f, luaRelativePath, userData); } return(serialId); }
public void Spawn_Successfully() { var entity = Substitute.For <PoolableEntity>(); _pool.Spawn().Returns(entity); Assert.AreEqual(entity, _poolService.Spawn <PoolableEntity>()); _pool.Received().Spawn(); }
private bool TrySpawn() { if (enemyPool == null) { return(false); } Enemy enemy = enemyPool.Spawn(nextSpawnParams); return(enemy != null); }
public object GetABFromPool(string resourceName) { ResourceObject resourceObject = m_ResourcePool.Spawn(resourceName); AssetBundle ab = null; if (resourceObject != null) { ab = resourceObject.Target as AssetBundle; } return(ab); }
/// <summary> /// 设置控制器 /// </summary> /// <param name="entity">要设置的状态机</param> /// <param name="assetName">要设置的资源名称</param> public void SetController(Animator animator, string assetName) { AssetObject assetObject = m_AssetPool.Spawn(assetName); if (assetObject == null) { GameEntry.Resource.LoadAsset(assetName, typeof(UnityEngine.Object), Constant.AssetPriority.TextureAsset, m_LoadAssetCallbacks, new LoadControllerInfo(animator)); } else { InternalSetController(animator, assetObject); } }
public Bullet Spawn() { Bullet bullet = m_BulletPool.Spawn(); if (bullet == null) { string name = "bullet" + m_serial++; GameObject obj = GameObject.Instantiate(m_prefab); obj.name = name; bullet = Bullet.Create(bulletAssetName, obj); m_BulletPool.Register(bullet, true); } return(bullet); }
private IntentItem CreateIntentItem(Entity entity) { IntentItem intentItem = null; IntentItemObject intentItemObject = m_IntentObjectPool.Spawn(); if (intentItemObject != null) { intentItem = (IntentItem)intentItemObject.Target; } else { intentItem = Instantiate(m_IntentItemTemplate, m_WidgetInstanceRoot, false); m_IntentObjectPool.Register(IntentItemObject.Create(intentItem), true); } return(intentItem); }
private FlightPathItem CreateFlightPathItem() { FlightPathItem pathItem = null; FlightPathObject flightPathObject = _FlightPathObjectPool.Spawn(); if (flightPathObject != null) { pathItem = (FlightPathItem)flightPathObject.Target; } else { pathItem = Instantiate(_FlightPathItemTemplate); _FlightPathObjectPool.Register(new FlightPathObject(pathItem), true); } return(pathItem); }
private HPBarItem CreateHPBarItem(Entity entity) { HPBarItem hpBarItem; HPBarItemObject hpBarItemObject = m_HPBarItemObjectPool.Spawn(); if (hpBarItemObject != null) { hpBarItem = (HPBarItem)hpBarItemObject.Target; } else { hpBarItem = Instantiate(m_HPBarItemTemplate, m_WidgetInstanceRoot, false); m_HPBarItemObjectPool.Register(HPBarItemObject.Create(hpBarItem), true); } return(hpBarItem); }
/// <summary> /// 根据名称获取实例化的GameObject /// </summary> /// <param name="name">GameObject的名称</param> /// <returns>实例化的GameObject</returns> public GameObject Spawn(string name) { GameObject gameObject = null; InstanceGameObject instanceGameObject = m_InstanceGameObjectPool.Spawn(name); if (instanceGameObject != null) { gameObject = (GameObject)instanceGameObject.Target; } else { gameObject = UnityEngine.Object.Instantiate(m_GameobjectAsset); m_InstanceGameObjectPool.Register(new InstanceGameObject(name, gameObject), true); } return(gameObject); }
/// <summary> /// 打开界面。 /// </summary> /// <param name="uiFormAssetName">界面资源名称。</param> /// <param name="uiGroupName">界面组名称。</param> /// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面。</param> /// <param name="userData">用户自定义数据。</param> /// <returns>界面的序列编号。</returns> public int OpenUIForm(string uiFormAssetName, string uiGroupName, bool pauseCoveredUIForm, object userData) { if (m_ResourceManager == null) { throw new System.Exception("You must set resource manager first."); } if (m_UIFormHelper == null) { throw new System.Exception("You must set UI form helper first."); } if (string.IsNullOrEmpty(uiFormAssetName)) { throw new System.Exception("UI form asset name is invalid."); } if (string.IsNullOrEmpty(uiGroupName)) { throw new System.Exception("UI group name is invalid."); } UIGroup uiGroup = (UIGroup)GetUIGroup(uiGroupName); if (uiGroup == null) { throw new System.Exception(string.Format("UI group '{0}' is not exist.", uiGroupName)); } int serialId = m_Serial++; UIFormInstanceObject uiFormInstanceObject = m_InstancePool.Spawn(uiFormAssetName); if (uiFormInstanceObject == null) { m_UIFormsBeingLoaded.Add(serialId); m_UIFormAssetNamesBeingLoaded.Add(uiFormAssetName); m_ResourceManager.LoadAsset(uiFormAssetName, m_LoadAssetCallbacks, new OpenUIFormInfo(serialId, uiGroup, pauseCoveredUIForm, userData)); } else { InternalOpenUIForm(serialId, uiFormAssetName, uiGroup, uiFormInstanceObject.Target, pauseCoveredUIForm, false, 0f, userData); } return(serialId); }
public int OpenUIForm(string uiFormAssetName, string uiGroupName, object userData) { UIGroup uig = (UIGroup)GetUIGroup(name); int serialId = m_Serial++; UIFormInstanceObject uiFormInstanceObject = m_InstancePool.Spawn(uiFormAssetName); if (uiFormInstanceObject == null) { m_UIFormsBeingLoaded.Add(serialId); m_UIFormAssetNamesBeingLoaded.Add(uiFormAssetName); m_ResourceManager.LoadAsset(uiFormAssetName, m_LoadAssetCallback, new OpenUIFormInfo(serialId, uiGroupName, userData)); } else { InternalOpenUIForm(serialId, uiFormAssetName, uiGroupName, uiFormInstanceObject.Target); } return serialId; }
/// <summary> /// 打开界面。 /// </summary> /// <param name="uiFormAssetName">界面资源名称。</param> /// <param name="userData">用户自定义数据。</param> /// <returns>界面的序列编号。</returns> public void OpenUIForm(string uiFormAssetName, object userData) { if (string.IsNullOrEmpty(uiFormAssetName)) { throw new LufyException("UI form asset name is invalid."); } if (m_ResManager == null) { throw new LufyException("ResManager is invalid."); } if (m_PoolManager == null) { throw new LufyException("ObjectPoolManager is invalid."); } UIFormLogic uiFormInstanceObject = null; m_cachedForms.TryGetValue(uiFormAssetName, out uiFormInstanceObject); if (uiFormInstanceObject == null) { UIFormObject obj = m_InstancePool.Spawn(uiFormAssetName); uiFormInstanceObject = obj?.Target as UIFormLogic; if (uiFormInstanceObject == null) { m_ResManager.LoadAsset(uiFormAssetName, m_LoadAssetCallbacks, userData); } else { m_cachedForms.Add(uiFormAssetName, uiFormInstanceObject); InternalOpenUIForm(uiFormAssetName, uiFormInstanceObject, 0, userData); } } else { m_formList.Remove(uiFormInstanceObject); InternalOpenUIForm(uiFormAssetName, uiFormInstanceObject, 0, userData); } }
private HPBarItem CreateHPBarItem(Entity entity) { HPBarItem hpBarItem = null; HPBarItemObject hpBarItemObject = m_HPBarItemObjectPool.Spawn(); if (hpBarItemObject != null) { hpBarItem = (HPBarItem)hpBarItemObject.Target; } else { hpBarItem = Instantiate(m_HPBarItemTemplate); Transform transform = hpBarItem.GetComponent <Transform>(); transform.SetParent(m_HPBarInstanceRoot); transform.localScale = Vector3.one; m_HPBarItemObjectPool.Register(HPBarItemObject.Create(hpBarItem), true); } return(hpBarItem); }
private DisplayItem CreateDisplayItem(Entity entity) { DisplayItem displayItem = null; DisplayItemObject displayItemObject = m_DisplayItemObjectPool.Spawn(); if (displayItemObject != null) { displayItem = (DisplayItem)displayItemObject.Target; } else { displayItem = Instantiate(m_DisplayItemTemplate); Transform transform = displayItem.GetComponent <Transform>(); transform.SetParent(m_DisplayInstanceRoot); transform.localScale = Vector3.one; m_DisplayItemObjectPool.Register(DisplayItemObject.Create(displayItem), true); } return(displayItem); }
private ExpBarItem CreateExpBarItem(Entity entity) { ExpBarItem expBarItem = null; ExpBarItemObject expBarItemObject = m_ExpBarItemObjectPool.Spawn(); if (expBarItemObject != null) { expBarItem = (ExpBarItem)expBarItemObject.Target; } else { expBarItem = Instantiate(m_ExpBarItemTemplate); Transform transform = expBarItem.GetComponent <Transform>(); transform.SetParent(m_ExpBarInstanceRoot); transform.localScale = Vector3.one; m_ExpBarItemObjectPool.Register(ExpBarItemObject.Create(expBarItem), true); } return(expBarItem); }
/// <summary> /// 创建定时器 /// </summary> /// <returns></returns> public TimeAction CreateTimeAction() { TimeAction timeAction = null; TimeActionObject timeActionObject = m_TimeActionObjectPool.Spawn(); if (timeActionObject != null) { timeAction = (TimeAction)timeActionObject.Target; } else { timeAction = new TimeAction(); TimeActionObject actionObject = new TimeActionObject(); actionObject.Initialize(timeAction); m_TimeActionObjectPool.Register(actionObject, true); } timeAction.Reset(); return(timeAction); }
public void Fire() { if (!CanFire()) { return; } SpawnParams spawnParams = new SpawnParams(); spawnParams.rotation = Quaternion.identity; spawnParams.spawnPoint = spawnPointOwner.transform.position; Bullet bullet = bulletPool.Spawn(spawnParams); if (!bullet) { return; } bullet.Velocity = (spawnPointOwner.transform.position - transform.position).normalized * bulletVelocity; timeSinceLastFireSeconds = 0.0f; }
//创建实体血条 private HPBarItem CreateHPbarItem() { HPBarItem hpBarItem; //先从对象池获取 HPBarItemObject hpBarItemObject = m_HPBarItemObjectPool.Spawn(); if (hpBarItemObject != null) { hpBarItem = hpBarItemObject.Target as HPBarItem; } else { //对象池中不存在,则创建新的 ReferenceCollector referenceCollector = Object.Instantiate(m_HPBarItemTemplate).GetComponent(typeof(ReferenceCollector)) as ReferenceCollector; hpBarItem = new HPBarItem(referenceCollector); referenceCollector.CachedTransform.SetParent(m_HPBarInstanceRoot, false); m_HPBarItemObjectPool.Register(new HPBarItemObject(hpBarItem), true); } return(hpBarItem); }
/// <summary> /// Spawn 对象 /// </summary> /// <param name="objAssetName">资源名称 带路径名 </param> /// <returns></returns> public async Task <UnityEngine.GameObject> Spawn(string objAssetName) { UnityEngine.GameObject target = null; NormalObject normalObject = m_InstancePool.Spawn(objAssetName); if (normalObject == null) { //UnityEngine.GameObject objAsset = ResourceManager.Instance.LoadAssetDataPath<UnityEngine.GameObject>(objAssetName); UnityEngine.GameObject objAsset = await GameFrameEntry.GetModule <AssetbundleModule>().LoadPrefab(objAssetName); if (objAsset != null) { normalObject = new NormalObject(objAssetName, null, objAsset, m_UnspawnParent); m_InstancePool.Register(normalObject, true); } } if (normalObject != null) { target = normalObject.Target as UnityEngine.GameObject; } return(target); }
public object GetAssetBundle(string assetBundleName) { if (string.IsNullOrEmpty(assetBundleName)) { return(false); } int childNamePosition = assetBundleName.IndexOf("Assets/"); if (childNamePosition + 1 >= assetBundleName.Length && childNamePosition != -1) { return(false); } string resourceChildName = childNamePosition != -1 ? assetBundleName.Substring(childNamePosition + 7).ToLower() : assetBundleName.ToLower(); ResourceObject resourceObject = m_ResourcePool.Spawn(resourceChildName); if (resourceObject != null) { return(resourceObject.Target); } return(null); }
public EntityInstanceObject SpawnEntityInstanceObject(string name) { return(m_InstancePool.Spawn(name)); }
/// <summary> /// 加载资源代理轮询。 /// </summary> /// <param name="elapseSeconds">逻辑流逝时间,以秒为单位。</param> /// <param name="realElapseSeconds">真实流逝时间,以秒为单位。</param> public void Update(float elapseSeconds, float realElapseSeconds) { if (m_WaitingType == WaitingType.None) { return; } if (m_WaitingType == WaitingType.WaitForAsset) { if (IsAssetLoading(m_Task.AssetName)) { return; } m_WaitingType = WaitingType.None; AssetObject assetObject = m_AssetPool.Spawn(m_Task.AssetName); if (assetObject == null) { TryLoadAsset(); return; } OnAssetObjectReady(assetObject); return; } if (m_WaitingType == WaitingType.WaitForDependencyAsset) { LinkedListNode <string> current = m_LoadingDependencyAssetNames.First; while (current != null) { if (!IsAssetLoading(current.Value)) { LinkedListNode <string> next = current.Next; if (!m_AssetPool.CanSpawn(current.Value)) { OnError(LoadResourceStatus.DependencyError, string.Format("Can not find dependency asset object named '{0}'.", current.Value)); return; } m_LoadingDependencyAssetNames.Remove(current); current = next; continue; } current = current.Next; } if (m_LoadingDependencyAssetNames.Count > 0) { return; } m_WaitingType = WaitingType.None; OnDependencyAssetReady(); return; } if (m_WaitingType == WaitingType.WaitForResource) { if (IsResourceLoading(m_Task.ResourceInfo.ResourceName.Name)) { return; } ResourceObject resourceObject = m_ResourcePool.Spawn(m_Task.ResourceInfo.ResourceName.Name); if (resourceObject == null) { OnError(LoadResourceStatus.DependencyError, string.Format("Can not find resource object named '{0}'.", m_Task.ResourceInfo.ResourceName.Name)); return; } m_WaitingType = WaitingType.None; OnResourceObjectReady(resourceObject); return; } }
public ItemInstanceObject SpawnItemInstanceObject(string name) { return(m_InstancePool.Spawn(name)); }