using System.IO; using UnityEngine; namespace MindPowerSdk { public class MonoKopTest : MonoBehaviour { public string mapPath = ""; public string mapName = ""; public short chunkSize = 64; public MPMap map = null; public Material terrainMaterial; public Material terrainMaterial2; void Start() { using FileStream fs = File.OpenRead(Path.Combine(mapPath, mapName)); BinaryReader reader = new BinaryReader(fs); map = new MPMap(); map.Load(reader); Debug.Log($"map size:({map.Width},{map.Height}) | section size:({map.SectionWidth},{map.SectionHeight})"); // GenTerrainMesh(); // TerrainGenerator.GenTerrain(map, chunkSize, terrainMaterial2, transform); } public void GenTerrainMesh() { // 自定义分块生成 int xCnt = Mathf.CeilToInt((float)map.Width / chunkSize); int yCnt = Mathf.CeilToInt((float)map.Height / chunkSize); for (short i = 0; i < yCnt; i++) { for (short j = 0; j < xCnt; j++) { short x = (short)(j * chunkSize); short y = (short)(i * chunkSize); Mesh mesh = map.GenMesh(x, y, chunkSize); (Texture2D texNo, Texture2D maskNo) = map.GenTxtNoTexture(x, y, chunkSize); GameObject go = new GameObject("m_" + i); // go.isStatic = true; go.transform.parent = transform; // Vector3 pos = Vector3.forward * map.Height; // go.transform.position = pos; // 设置材质 MeshRenderer meshRenderer = go.AddComponent(); var mat = meshRenderer.material = new Material(terrainMaterial); mat.SetTexture("_TexNo", texNo); mat.SetTexture("_MaskNo", maskNo); MeshFilter meshFilter = go.AddComponent(); meshFilter.mesh = mesh; #if UNITY_EDITOR //AssetDatabase.CreateAsset(mesh, "Assets/Sandbox/map.mesh"); //(Texture2D t1, Texture2D t2) = map.GenTxtNoTexture(x, y, chunkSize); //byte[] png = t1.EncodeToPNG(); //File.WriteAllBytes($"Assets/Sandbox/map_tex_no.png", png); //png = t2.EncodeToPNG(); //File.WriteAllBytes($"Assets/Sandbox/map_alph_no.png", png); #endif } } } } }