Files
2026-03-04 10:03:45 +08:00

61 lines
2.0 KiB
C#

using UnityEngine;
namespace AmazingAssets.TerrainToMesh.Example
{
[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
public class ExportMeshAndBasemapByPositionIndex : MonoBehaviour
{
public TerrainData terrainData;
public int vertexCountHorizontal = 100;
public int vertexCountVertical = 100;
[Space(10f)]
public bool exportHoles;
public int mapsResolution = 512;
[Header("Chunk count is 4x4")]
[Range(0f, 3f)]
public int positionX;
[Range(0f, 3f)]
public int positionY;
private int chunkCountHorizontal = 4;
private int chunkCountVertical = 4;
private void Start()
{
if (!(terrainData == null))
{
Mesh sharedMesh = terrainData.TerrainToMesh().ExportMesh(vertexCountHorizontal, vertexCountVertical, chunkCountHorizontal, chunkCountVertical, positionX, positionY, perChunkUV: true, Normal.CalculateFromMesh);
GetComponent<MeshFilter>().sharedMesh = sharedMesh;
Texture2D value = terrainData.TerrainToMesh().ExportBasemapDiffuseTexture(mapsResolution, chunkCountHorizontal, chunkCountVertical, positionX, positionY, exportHoles, unpack: false);
Texture2D texture2D = terrainData.TerrainToMesh().ExportBasemapNormalTexture(mapsResolution, chunkCountHorizontal, chunkCountVertical, positionX, positionY, unpack: false);
Texture2D texture2D2 = terrainData.TerrainToMesh().ExportBasemapMaskTexture(mapsResolution, chunkCountHorizontal, chunkCountVertical, positionX, positionY, unpack: false);
Material material = new Material(Shader.Find("Standard"));
material.SetTexture("_MainTex", value);
material.SetTexture("_BumpMap", texture2D);
if (texture2D2 != null)
{
material.SetTexture("_MetallicGlossMap", texture2D2);
material.EnableKeyword("_METALLICGLOSSMAP");
}
if (texture2D != null)
{
material.EnableKeyword("_NORMALMAP");
}
if (exportHoles)
{
material.SetFloat("_Mode", 1f);
material.EnableKeyword("_ALPHATEST_ON");
}
GetComponent<Renderer>().sharedMaterial = material;
}
}
}
}