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(); }
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(); }
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(); }