示例#1
0
        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;
        }
示例#2
0
        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;
            }
        }
示例#3
0
    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));
            }
        }
    }