public void Init(int sceneId) { m_nSceneId = sceneId; m_cResScene = ResCfgSys.Instance.GetCfg <ResScene>(m_nSceneId); if (m_cResScene == null) { CLog.LogError("找不到sceneId=" + m_nSceneId + "的场景配置"); return; } m_cUnitRoot = new GameObject("UnitRoot"); m_cUnitRoot.name = "UnitRoot"; GameObject.DontDestroyOnLoad(m_cUnitRoot); m_cRemoteRoot = new GameObject("RemoteRoot"); m_cRemoteRoot.name = "RemoteRoot"; GameObject.DontDestroyOnLoad(m_cRemoteRoot); m_dicUnit = new Dictionary <uint, Unit>(); m_dicCampUnits = new Dictionary <int, List <Unit> >(); m_cUnitContainer = new DynamicContainer(); m_cUnitContainer.OnAdd += OnAddUnit; m_cUnitContainer.OnRemove += OnRemoveUnit; m_cUnitContainer.OnUpdate += OnUpdateUnit; m_dicRemote = new Dictionary <uint, Remote>(); m_dicCampRemotes = new Dictionary <int, List <Remote> >(); m_cRemoteContainer = new DynamicContainer(); m_cRemoteContainer.OnAdd += OnAddRemote; m_cRemoteContainer.OnRemove += OnRemoveRemote; m_cRemoteContainer.OnUpdate += OnUpdateRemote; int campMax = (int)CampType.CampMax; m_dicCampUnitField = new Dictionary <int, AgentObjField>(); for (int i = 0; i < campMax; i++) { AgentObjField agentObjField = new AgentObjField(); agentObjField.Init(i, (int)AgentObjectType.Unit); m_dicCampUnitField.Add(i, agentObjField); } m_dicCampRemoteField = new Dictionary <int, AgentObjField>(); for (int i = 0; i < campMax; i++) { AgentObjField agentObjField = new AgentObjField(); agentObjField.Init(i, (int)AgentObjectType.Remote); m_dicCampRemoteField.Add(i, agentObjField); } BehaviourPool <UnitAirShip> .Instance.Init(30); BehaviourPool <Remote> .Instance.Init(100); ObjectPool <GameCollider> .Instance.Init(200); FrameSyncSys.Instance.OnFrameSyncUpdate += OnFrameSyncUpdate; }
public void Clear() { m_nSceneId = -1; m_cResScene = null; BehaviourPool <UnitAirShip> .Instance.Dispose(); BehaviourPool <Remote> .Instance.Dispose(); FrameSyncSys.Instance.OnFrameSyncUpdate -= OnFrameSyncUpdate; foreach (var item in m_dicCampUnitField) { item.Value.Clear(); } m_dicCampUnitField.Clear(); foreach (var item in m_dicCampRemoteField) { item.Value.Clear(); } m_dicCampRemoteField.Clear(); m_dicCampUnits.Clear(); m_dicCampRemotes.Clear(); m_dicUnit.Clear(); m_dicRemote.Clear(); if (m_cUnitContainer != null) { m_cUnitContainer.OnAdd -= OnAddUnit; m_cUnitContainer.OnRemove -= OnRemoveUnit; m_cUnitContainer.OnUpdate -= OnUpdateUnit; m_cUnitContainer.Clear(); m_cUnitContainer = null; } if (m_cUnitRoot != null) { GameObject.Destroy(m_cUnitRoot); m_cUnitRoot = null; } if (m_cRemoteContainer != null) { m_cRemoteContainer.OnAdd -= OnAddRemote; m_cRemoteContainer.OnRemove -= OnRemoveRemote; m_cRemoteContainer.OnUpdate -= OnUpdateRemote; m_cRemoteContainer.Clear(); m_cRemoteContainer = null; } if (m_cRemoteRoot != null) { GameObject.Destroy(m_cRemoteRoot); m_cRemoteRoot = null; } }
private void OnEnterTrigger(int number, BoxCollider box) { ResScene data = DataReader <ResScene> .Get(number); if (data != null) { foreach (var monster in mMonsters) { monster.LeaveScene(); } mMonsters.Clear(); Vector3 pos = box.transform.position; Vector3 size = box.size; for (int i = 0, len = (number - 200000) + 10; i < len; i++) { mMonsters.Add(CreateSceneObject(data.actor_id, Random.Range(-size.x, size.x) + pos.x, Random.Range(-size.z, size.z) + pos.z)); } } }