Esempio n. 1
0
    public void InitSceneObject()
    {
        if (SceneObj.RoofNum == 0)
        {
            return;
        }

        CleanSceneData();

        MaxTempVertex = SceneObj.RoofNum * 400 * 3; //per Roof+Turnnel Max Collision Face Less 400

        MaxNpcPosCount = SceneObj.RoofNum * 10;     //per Roof+Turnnel Max Npc Less 10
        ////////////create Npc Pos Struct //////////////////////////////////////////
        ////////////create Npc Pos Struct //////////////////////////////////////////
        CurrentNpcPosCount = 0;

        NpcPos = new Vector3[MaxNpcPosCount];
        ////////////End create Npc Pos Struct ///////////////////////////////////////
        ////////////End create Npc Pos Struct ///////////////////////////////////////

        ////////////create Collison Struct //////////////////////////////////////////
        ////////////create Collison Struct //////////////////////////////////////////
        TotalCollisionWallFaceCount   = 0;
        TotalCollisionGroundFaceCount = 0;

        WallVertices  = new Vector3[MaxTempVertex];
        WallNormals   = new Vector3[MaxTempVertex];
        WallTriangles = new int[MaxTempVertex];

        GroundVertices  = new Vector3[MaxTempVertex];
        GroundNormals   = new Vector3[MaxTempVertex];
        GroundTriangles = new int[MaxTempVertex];
        ////////////End create Collison Struct ///////////////////////////////////////
        ////////////End create Collison Struct ///////////////////////////////////////

        SceneObjIns         = new RandomSceneObj();
        SceneObjIns.RoofNum = SceneObj.RoofNum;

        SceneObjIns.Roof     = new GameObject[SceneObjIns.RoofNum];
        SceneObjIns.Turnnel  = new GameObject[SceneObjIns.RoofNum + 1];
        SceneObjIns.RoofMini = new GameObject[SceneObjIns.RoofNum];

        if (SceneObj.RoofFrist != null)
        {
            SceneObjIns.RoofFrist = GameObject.Instantiate(SceneObj.RoofFrist) as GameObject;
            SceneObjIns.RoofFrist.GetComponent <Renderer>().enabled = false;

            SceneObjIns.RoofFrist.transform.position = new Vector3(0, 0, 0);

            int currentId = 0;

            SceneObjIns.RoofFrist.AddComponent <SceneObjAttrib>();

            SceneNpcPos.StartPos = SceneObjIns.RoofFrist.transform.position;

            GameObject OutObj = SceneObjIns.RoofFrist.transform.Find("out").gameObject;
            OutObj.SetActive(false);

            for (int i = 0; i < SceneObj.RoofNum; i++)
            {
                OutObj     = GenMidRoof(currentId, OutObj.transform.position, OutObj.transform.rotation, false);
                currentId += 1;
            }

            GenMidRoof(currentId, OutObj.transform.position, OutObj.transform.rotation, true);
        }

        CollisionWall   = new GameObject();
        CollisionGround = new GameObject();

        CreateCollisionFace(CollisionWall, "CollisionWall", TotalCollisionWallFaceCount, WallVertices, WallNormals, WallTriangles);
        CreateCollisionFace(CollisionGround, "CollisionGround", TotalCollisionGroundFaceCount, GroundVertices, GroundNormals, GroundTriangles);

        PathFind.init(CollisionGround.GetComponent <MeshCollider>());

        CreateSceneNpcPos();
    }
Esempio n. 2
0
    void CleanSceneData()
    {
        MaxTempVertex = 0;

        TotalCollisionWallFaceCount   = 0;
        TotalCollisionGroundFaceCount = 0;

        if (WallVertices != null)
        {
            WallVertices = null;
        }
        if (WallNormals != null)
        {
            WallNormals = null;
        }
        if (WallTriangles != null)
        {
            WallTriangles = null;
        }

        if (GroundVertices != null)
        {
            GroundVertices = null;
        }
        if (GroundNormals != null)
        {
            GroundNormals = null;
        }
        if (GroundTriangles != null)
        {
            GroundTriangles = null;
        }
        ///////////////////////////////////////////////////////////////////////////////
        if (CollisionWall != null)
        {
            GameObject.Destroy(CollisionWall);
        }

        if (CollisionGround != null)
        {
            GameObject.Destroy(CollisionGround);
        }

        if (SceneObjIns != null)
        {
            if (SceneObjIns.RoofEnd != null)
            {
                GameObject.Destroy(SceneObjIns.RoofEnd);
            }

            if (SceneObjIns.RoofFrist != null)
            {
                GameObject.Destroy(SceneObjIns.RoofFrist);
            }

            if (SceneObjIns.Roof != null)
            {
                for (int i = 0; i < SceneObjIns.Roof.Length; i++)
                {
                    if (SceneObjIns.Roof[i] != null)
                    {
                        GameObject.Destroy(SceneObjIns.Roof[i]);
                    }
                }
            }

            if (SceneObjIns.Turnnel != null)
            {
                for (int i = 0; i < SceneObjIns.Turnnel.Length; i++)
                {
                    if (SceneObjIns.Turnnel[i] != null)
                    {
                        GameObject.Destroy(SceneObjIns.Turnnel[i]);
                    }
                }
            }

            if (SceneObjIns.RoofMini != null)
            {
                for (int i = 0; i < SceneObjIns.RoofMini.Length; i++)
                {
                    if (SceneObjIns.RoofMini[i] != null)
                    {
                        GameObject.Destroy(SceneObjIns.RoofMini[i]);
                    }
                }
            }

            SceneObjIns.RoofNum = 0;
            SceneObjIns         = null;
        }
        ///////////////////////////////////////////////////////////////////////////////
        MaxNpcPosCount = 0;

        CurrentNpcPosCount = 0;

        if (NpcPos != null)
        {
            NpcPos = null;
        }

        if (SceneNpcPos != null)
        {
            if (SceneNpcPos.NpcPosArray != null)
            {
                SceneNpcPos.NpcPosArray = null;
            }
        }

        if (SDoor != null)
        {
            SDoor.Clear();
        }
        ///////////////////////////////////////////////////////////////////////////////
        GC.Collect();
    }
Esempio n. 3
0
    public void InitMap(List <SceneOneRoomConfig> roofCfgs)
    {
        SceneObj.RoofNum = roofCfgs.Count - 2;
        if (SceneObj.RoofNum == 0)
        {
            return;
        }

        CleanSceneData();

        MaxTempVertex = SceneObj.RoofNum * 400 * 3; //per Roof+Turnnel Max Collision Face Less 400

        MaxNpcPosCount = SceneObj.RoofNum * 10;     //per Roof+Turnnel Max Npc Less 10
        ////////////create Npc Pos Struct //////////////////////////////////////////
        ////////////create Npc Pos Struct //////////////////////////////////////////
        CurrentNpcPosCount = 0;

        NpcPos = new Vector3[MaxNpcPosCount];
        ////////////End create Npc Pos Struct ///////////////////////////////////////
        ////////////End create Npc Pos Struct ///////////////////////////////////////

        ////////////create Collison Struct //////////////////////////////////////////
        ////////////create Collison Struct //////////////////////////////////////////
        TotalCollisionWallFaceCount   = 0;
        TotalCollisionGroundFaceCount = 0;

        WallVertices  = new Vector3[MaxTempVertex];
        WallNormals   = new Vector3[MaxTempVertex];
        WallTriangles = new int[MaxTempVertex];

        GroundVertices  = new Vector3[MaxTempVertex];
        GroundNormals   = new Vector3[MaxTempVertex];
        GroundTriangles = new int[MaxTempVertex];
        ////////////End create Collison Struct ///////////////////////////////////////
        ////////////End create Collison Struct ///////////////////////////////////////

        SceneObjIns         = new RandomSceneObj();
        SceneObjIns.RoofNum = SceneObj.RoofNum;

        SceneObjIns.Roof     = new GameObject[SceneObjIns.RoofNum];
        SceneObjIns.Turnnel  = new GameObject[SceneObjIns.RoofNum + 1];
        SceneObjIns.RoofMini = new GameObject[SceneObjIns.RoofNum];

        if (SceneObj.RoofFrist != null)
        {
            SceneObjIns.RoofFrist = GameObject.Instantiate(SceneObj.RoofFrist) as GameObject;
            SceneObjIns.RoofFrist.GetComponent <Renderer>().enabled = false;

            roofCfgs[0].m_modelObject                = SceneObjIns.RoofFrist;
            roofCfgs[0].m_object                     = new GameObject("PositionDigg");
            roofCfgs[0].m_object.transform.parent    = SceneObjIns.RoofFrist.transform;
            SceneObjIns.RoofFrist.transform.position = new Vector3(0, 0, 0);

            int currentId = 0;

            SceneObjIns.RoofFrist.AddComponent <SceneObjAttrib>();

            SceneNpcPos.StartPos = SceneObjIns.RoofFrist.transform.position;

            GameObject OutObj = SceneObjIns.RoofFrist.transform.Find("out").gameObject;
            OutObj.SetActive(false);

            for (int i = 0; i < SceneObj.RoofNum; i++)
            {
                OutObj     = GenMidRoof(currentId, OutObj.transform.position, OutObj.transform.rotation, false, roofCfgs[i + 1]);
                currentId += 1;
            }

            GenMidRoof(currentId, OutObj.transform.position, OutObj.transform.rotation, true, roofCfgs[SceneObj.RoofNum + 1]);
        }

        CollisionWall   = new GameObject();
        CollisionGround = new GameObject();

        MeshCollider cc = CreateCollisionFace(CollisionWall, "CollisionWall", TotalCollisionWallFaceCount, WallVertices, WallNormals, WallTriangles);

        cc.isTrigger           = false;
        cc.gameObject.isStatic = true;
        cc.gameObject.layer    = LayerMask.NameToLayer("Ignore Raycast");
        cc.enabled             = false;
        cc                     = CreateCollisionFace(CollisionGround, "CollisionGround", TotalCollisionGroundFaceCount, GroundVertices, GroundNormals, GroundTriangles);
        cc.isTrigger           = false;
        cc.gameObject.isStatic = true;
        cc.tag                 = "Terrain";
        cc.enabled             = false;

        //PathFind.init(CollisionGround.GetComponent<MeshCollider>());

        CreateSceneNpcPos();
    }