// 执行Add操作,但是也会触发Spawn流程,适用于对已经存在于地图上的对象使用 public virtual void SpawnAdd(TUnit chara, string tdid, long?rtid = null, int?team = null) { if (chara == null) { return; } if (!rtid.HasValue) { chara.SetRTID(IDUtil.Gen()); } else { chara.SetRTID(rtid.Value); } TConfig config = TDLuaMgr?.Get <TConfig>(tdid); if (config == null) { config = new TConfig(); } else if (IsCopyConfig) { config = config.Copy <TConfig>(); } chara.SpawnMgr = this; chara.SetTDID(tdid); chara.SetTeam(team); chara.SetConfig(config); chara.OnInit(); chara.OnBeSpawned(); OnSpawned(tdid, chara.ID, chara); AddToData(chara); }
protected virtual GameObject GetPrefab(string tdid, string prefab, params object[] ps) { if (!prefab.IsInv()) { return(BundleCacher.Get(prefab)); } TConfig config = TDLuaMgr?.Get <TConfig>(tdid); return(config?.GetPrefab()); }
public virtual TUnit Spawn(string tdid, Vector3?spwanPoint = null, Quaternion?quaternion = null, int?team = null, long?rtid = null, string prefab = null) { if (tdid.IsInv()) { return(null); } //获得配置数据 TConfig config = TDLuaMgr?.Get <TConfig>(tdid); if (config == null) { CLog.Error("配置错误,没有这个配置TDID:" + tdid); return(null); } //获得prefab GameObject goPrefab; if (!prefab.IsInv()) { goPrefab = BundleCacher.Get(prefab); } else { goPrefab = config?.GetPrefab(); } if (goPrefab == null) { if (prefab != null) { CLog.Error("没有这个CustomPrefab:{0}", prefab); } return(null); } GameObject charaGO = SpawnPool.Spawn(goPrefab, spwanPoint, quaternion); charaGO.name = tdid; TUnit unitChara = BaseCoreMono.GetUnityComponet <TUnit>(charaGO); SpawnAdd(unitChara, tdid, rtid, team); Callback_OnSpawn?.Invoke(unitChara); return(unitChara); }