Beispiel #1
0
 // Use this for initialization
 void Start()
 {
     this.m_PosStream = ScriptReactor.Instance.getCharacterStream();
 }
 private ScriptReactor()
 {
     this.mainCharacterPosStream = new UniRx.Subject <UniRx.Tuple <float, float, float> >();
 }
    // Use this for initialization
    void Start()
    {
        mainCharacterPosStream = ScriptReactor.Instance.getCharacterStream();

        // observer character position @ every second
        mainCharacterPosStream.SubscribeOn(Scheduler.ThreadPool).Sample(TimeSpan.FromSeconds(1.0)).Subscribe(this);

        //////////////////////////////////////////

        TerrainData td = this.terrain.terrainData;

        float terrainWidth  = td.size.x;
        float terrainHeight = td.size.y;

        Vector3 vec = this.terrain.GetPosition();

        float x = vec.x;
        float y = vec.y;
        float z = vec.z;

        // need to change resolution before setting the size
        int cx = this.terrain.terrainData.heightmapHeight;
        int rx = this.terrain.terrainData.heightmapWidth;
        //     int resolution = this.terrain.terrainData.detailResolution;

        int baseMapResolution = this.terrain.terrainData.baseMapResolution;

        TerrainData _genTD = new TerrainData();

        _genTD.heightmapResolution = this.terrain.terrainData.heightmapResolution;
        _genTD.SetDetailResolution(rx, cx);

        _genTD.size = new Vector3(td.size.x, td.size.y, td.size.z);

        GameObject tGO = Terrain.CreateTerrainGameObject(_genTD);


        this.pTerrain = tGO.GetComponent <Terrain>();
        this.pTerrain.transform.position += new Vector3(td.size.x, 0, 0);

        // Read terrain from file

        int h = this.terrain.terrainData.heightmapHeight;
        int w = this.terrain.terrainData.heightmapWidth;

        float[,] data = new float[h, w];

        data[0, 0] = 0.05f;
        data[0, 1] = 0.02f;
        data[0, 2] = 0.02f;
        data[0, 4] = 0.1f;
        data[1, 0] = 0.021f;

        // read file

        // 1.
        using (System.IO.BinaryReader b = new BinaryReader(
                   File.Open("terrainData.raw", FileMode.Open)))
        {
            // 2.
            // Position and length variables.

            // 2A.
            // Use BaseStream.
            int length = (int)b.BaseStream.Length;

            for (int r = 0; r < h; r++)
            {
                for (int c = 0; c < w; c++)
                {
                    data[r, c] = (float)b.ReadUInt16() / 0xFFFF;
                }
            }
        }

        this.pTerrain.terrainData.SetHeights(0, 0, data);
        this.pTerrain.Flush();
    }