示例#1
0
    public Texture Bake(LODTerrainData terrainData, int size = 2048)
    {
        this.size = size;
        this.CreateObjects();
        this.UpdateCameraModes();
        SplatsNormalmap.quads[this.key].SetActive(true);
        this.rttCamera.gameObject.SetActive(true);
        this.rttCamera.enabled = true;
        TerrainConfig terrainConfig = GameScene.mainScene.terrainConfig;

        this.sntMat.SetTexture("_Control", terrainData.splatsmapTex);
        for (int i = 0; i < terrainData.spaltsmapLayers; i++)
        {
            Splat splat = terrainData.splats[i];
            if (splat != null)
            {
                this.sntMat.SetTexture("_Splat" + i, splat.normalMap);
                this.sntMat.SetTextureScale("_Splat" + i, new Vector2(splat.tilingOffset.x, splat.tilingOffset.y));
                this.sntMat.SetTextureOffset("_Splat" + i, Vector2.zero);
            }
            else
            {
                splat = terrainData.splats[0];
                this.sntMat.SetTexture("_Splat" + i, terrainConfig.baseSplat.normalMap);
                this.sntMat.SetTextureScale("_Splat" + i, new Vector2(splat.tilingOffset.x, splat.tilingOffset.y));
                this.sntMat.SetTextureOffset("_Splat" + i, Vector2.zero);
            }
        }
        this.rttCamera.targetTexture = this.rtt;
        RenderTexture.active         = this.rtt;
        this.tex.ReadPixels(new Rect(0f, 0f, (float)size, (float)size), 0, 0);
        this.tex.Apply();
        return(this.tex);
    }
示例#2
0
 public void Destroy()
 {
     this.terrainData.Release();
     this.terrainData = null;
     this.uvs         = null;
     this.vertices    = null;
     this.normals     = null;
     this.triangles   = null;
     this.tangents    = null;
     DelegateProxy.GameDestory(this.matrial);
     this.matrial = null;
     DelegateProxy.GameDestory(this.mesh);
     this.mesh = null;
 }
示例#3
0
 /// <summary>
 /// 地形资源加载完成,开始显示地形
 /// </summary>
 /// <param name="asset"></param>
 private void OnTerrainLoadCompate(Asset asset)
 {
     if (asset.loaded)           //资源加载的直接显示
     {
         this.terrain      = asset.terrain;
         this.terrain.name = this.key;
         this.terrain.transform.position = new Vector3(this.position.x, 0f, this.position.z);
         this.terrain.gameObject.layer   = GameLayer.Layer_Ground;
         if (this._lightmapPrototype.lightmapIndex >= 0)
         {
             this.terrain.GetComponent <Renderer>().lightmapIndex        = this._lightmapPrototype.lightmapIndex;
             this.terrain.GetComponent <Renderer>().lightmapTilingOffset = this._lightmapPrototype.lightmapTilingOffset;
         }
         this.terrain.splatsMapPath = string.Concat(new object[]
         {
             "Scenes/",
             this.region.scene.sceneID,
             "/",
             this.region.regionX,
             "_",
             this.region.regionY,
             "/",
             this.tileX,
             "_",
             this.tileY,
             "Splats"
         });
         if (!GameScene.isPlaying)
         {
             this.terrain.BuildMaterial(null);
         }
     }
     else               //不是加载的,创建一个基础的地形
     {
         LODTerrainData terrainData = new LODTerrainData();
         this.terrain      = LODTerrain.CreateTerrainGameObject(terrainData, false);
         this.terrain.name = this.key;
         this.terrain.transform.position = new Vector3(this.position.x, 0f, this.position.z);
         this.terrain.gameObject.layer   = GameLayer.Layer_Ground;
         this.terrain.Init();
     }
     if (!GameScene.isPlaying && this.terrain != null)        //给地形添加网格碰撞器
     {
         this.terrain.gameObject.AddComponent <MeshCollider>();
     }
 }
示例#4
0
    /// <summary>
    /// 使用地形数据信息创建地形游戏对象
    /// </summary>
    /// <param name="terrainData">属性数据</param>
    /// <param name="useTrrainData"></param>
    /// <returns></returns>
    public static LODTerrain CreateTerrainGameObject(LODTerrainData terrainData, bool useTrrainData = false)
    {
        GameObject gameObject = new GameObject();
        LODTerrain lODTerrain = gameObject.AddComponent <LODTerrain>();

        gameObject.isStatic      = true;
        lODTerrain.terrainData   = terrainData;
        lODTerrain.terrainConfig = GameScene.mainScene.terrainConfig;
        lODTerrain.mesh          = new Mesh();
        if (GameScene.isPlaying)
        {
            lODTerrain.mesh.vertices = terrainData.vertices;
        }
        else
        {
            if (LODTerrain.shareVertices == null)
            {
                LODTerrain.BuildShareVertices();
            }
            if (terrainData.vertices != null)
            {
                lODTerrain.vertices = terrainData.vertices;
            }
            else
            {
                lODTerrain.vertices = LODTerrain.shareVertices;
            }
            lODTerrain.normals       = terrainData.normals;
            lODTerrain.tangents      = terrainData.tangents;
            lODTerrain.mesh.vertices = lODTerrain.vertices;
            lODTerrain.BuildUVs();
            lODTerrain.mesh.normals  = lODTerrain.normals;
            lODTerrain.mesh.tangents = lODTerrain.tangents;
            lODTerrain.BuildTriangles();
        }
        gameObject.AddComponent <MeshFilter>().mesh = lODTerrain.mesh;
        lODTerrain.terrainRenderer = gameObject.AddComponent <MeshRenderer>();
        if (GameScene.isPlaying)
        {
            lODTerrain.terrainRenderer.enabled        = false;
            lODTerrain.terrainRenderer.receiveShadows = true;
            lODTerrain.terrainRenderer.castShadows    = false;
        }
        return(lODTerrain);
    }