public List <GameObject> GenerateOverlays(GameObject regionContainer) { List <GameObject> goList = new List <GameObject> (); for (int i = 0; i < 4; ++i) { overlays [i] = new RSTerrainOverlay(i, region); } for (int i = 0; i < 4; ++i) { RSTerrainOverlay overlay = overlays [i]; Mesh[] overlayMesh = overlay.renderMesh(); if (overlayMesh.Length == 2) { Material waterMat = UnityClient.waterMat; GameObject meshGOWater = new GameObject("MeshLayer-Water" + i); meshGOWater.AddComponent <MeshRenderer> ().sharedMaterial = waterMat; // UnityStandardAssets.Water.Water waterScript = meshGOWater.AddComponent<UnityStandardAssets.Water.Water> (); // waterScript.waterMode = UnityStandardAssets.Water.Water.WaterMode.Reflective; meshGOWater.AddComponent <MeshFilter> (); meshGOWater.GetComponent <MeshFilter> ().mesh = overlayMesh [1]; meshGOWater.transform.position = new Vector3(0, 0.25f, 0); meshGOWater.transform.localScale = new Vector3(1 / 128f, -1 / 128f, 1 / 128f); //(0.0078125f, 0.0078125f, 0.0078125f); meshGOWater.transform.parent = regionContainer.transform; //meshGOWater.isStatic = true; meshGOWater.layer = LayerMask.NameToLayer("Water"); waterMeshList.Add(meshGOWater.GetComponent <MeshFilter> ()); goList.Add(meshGOWater); } if (i > 0) { GameObject meshGO = new GameObject("Overlay:" + i); meshGO.AddComponent <MeshFilter> ().mesh = overlayMesh [0]; Material[] overlayMat = new Material[overlayMesh [0].subMeshCount]; string[] meshMats = overlayMesh [0].name.Split(','); for (int a = 0; a < overlayMat.Length; ++a) { int texId = int.Parse(meshMats [a]); Material localMat = null; localMat = UnityClient.getGroundMaterial(texId); overlayMat [a] = localMat; } meshGO.AddComponent <MeshRenderer> ().sharedMaterials = overlayMat; meshGO.transform.position = new Vector3(0, 0.05f, 0); meshGO.transform.localScale = new Vector3(1 / 128f, -1 / 128f, 1 / 128f); meshGO.AddComponent <MeshCollider> (); meshGO.transform.parent = regionContainer.transform; goList.Add(meshGO); if (i == 0) { meshGO.transform.GetComponent <MeshRenderer> ().shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; } if (i != 0) //Reverse Floor Triangles { Mesh overlayMeshUnder = overlay.renderMeshUnder(); //9.55 GameObject meshGOUnder = new GameObject("Overlay Reversed:" + i); meshGOUnder.AddComponent <MeshFilter> ().mesh = overlayMeshUnder; Material[] overlayMatUnder = new Material[overlayMeshUnder.subMeshCount]; string[] meshMatsUnder = overlayMeshUnder.name.Split(','); for (int a = 0; a < overlayMatUnder.Length; ++a) { int texId = int.Parse(meshMatsUnder [a]); Material localMat = null; localMat = UnityClient.getGroundMaterial(texId); overlayMatUnder [a] = localMat; } meshGOUnder.AddComponent <MeshRenderer> ().sharedMaterials = overlayMatUnder; if (i == 1) { meshGOUnder.transform.position = new Vector3(0, 0, 0); } if (i == 2) { meshGOUnder.transform.position = new Vector3(0, 0, 0); } if (i == 3) { meshGOUnder.transform.position = new Vector3(0, 0, 0); } meshGOUnder.transform.localScale = new Vector3(1 / 128f, -1 / 128f, 1 / 128f); meshGOUnder.AddComponent <MeshCollider> (); meshGOUnder.transform.parent = regionContainer.transform; goList.Add(meshGOUnder); } } } return(goList); }