// 执行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);
        }