コード例 #1
0
    public PhysTerrain Bake(Texture2D map)
    {
        PhysTerrain bake = new PhysTerrain();

        terrain = GetComponent <Terrain>();
        var data       = terrain.terrainData;
        int resolusion = map.width;

        //     var heights = data.GetHeights(0, 0, map.width, map.height);
        float[,] heights = new float[map.width, map.height];
        float verticalScale = data.size.y;

        for (int x = 0; x < map.width; x++)
        {
            for (int y = 0; y < map.height; y++)
            {
                heights[x, y] = map.GetPixel(x, y).r *verticalScale;
                //     img.SetPixel(x, y, Color.Lerp(Color.black, Color.white, heights[x, y]));
            }
            //     Debug.Log(heights[x, 5]* verticalScale);
        }
        for (int x = 0; x < resolusion - 1; x++)
        {
            for (int z = x; z < resolusion; z++)
            {
                float h1 = heights[x, z];
                float h2 = heights[z, x];
                heights[x, z] = h2;
                heights[z, x] = h1;
            }
        }
        BinaryFormatter bf = new BinaryFormatter();
        MemoryStream    ms = new MemoryStream();

        bf.Serialize(ms, heights);
        bake.heights    = ms.ToArray();
        bake.z          = data.size.z;
        bake.x          = data.size.x;
        bake.resolusion = map.width;
        bake.tag        = physTag;
        if (physTag == "")
        {
            bake.tag = transform.name;
        }
        bake.position = transform.position.NetworkVector3();
        return(bake);
    }
コード例 #2
0
    public PhysTerrain Bake()
    {
        PhysTerrain bake = new PhysTerrain();

        terrain = GetComponent <Terrain>();
        var   data          = terrain.terrainData;
        int   resolusion    = data.heightmapResolution;
        var   heights       = data.GetHeights(0, 0, resolusion, resolusion);
        float verticalScale = data.size.y;

        for (int x = 0; x < resolusion; x++)
        {
            for (int z = 0; z < resolusion; z++)
            {
                heights[x, z] *= verticalScale;
            }
        }
        for (int x = 0; x < resolusion - 1; x++)
        {
            for (int z = x; z < resolusion; z++)
            {
                float h1 = heights[x, z];
                float h2 = heights[z, x];
                heights[x, z] = h2;
                heights[z, x] = h1;
            }
        }
        BinaryFormatter bf = new BinaryFormatter();
        MemoryStream    ms = new MemoryStream();

        bf.Serialize(ms, heights);
        bake.heights    = ms.ToArray();
        bake.z          = data.size.z;
        bake.x          = data.size.x;
        bake.resolusion = resolusion;
        return(bake);
    }