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