using UnityEngine;
using System.Collections;
using System.Collections.Generic;
// 创建自定义Mesh类
public class CreateMesh
{
private Vector2[] newUV;
Mesh tMesh;
GameObject tPolygon;
/// <summary>
/// 生成自定义多边形方法
/// </summary>
/// <param name="s_Vertives">自定义的顶点数组</param>
public void DoCreatPloygonMesh(Vector3[] s_Vertives, Vector2[] uv, Vector3[] normals, Texture img,int z_row = 80, int z_column = 80, int N_row = 20, int N_column = 20)
{
newUV = uv;
//新建一个空物体进行进行绘制自定义多边形
tPolygon = new GameObject("tPolygon");
//绘制所必须的两个组件
tPolygon.AddComponent<MeshFilter>();
tPolygon.AddComponent<MeshRenderer>();
tPolygon.GetComponent<Renderer>().material.shader = Shader.Find("Unlit/Transparent Colored");
tPolygon.GetComponent<Renderer>().material.mainTexture = img;
//新申请一个Mesh网格
tMesh = new Mesh();
//存储所有的顶点
Vector3[] tVertices = s_Vertives;
//存储画所有三角形的点排序
List<int> tTriangles = new List<int>();
//根据所有顶点填充点排序
for (int i = 0; i < tVertices.Length-2; i++)
{
int n = i / 4;
if (i % 4 == 0)
{
tTriangles.Add(0 + n * 4);
tTriangles.Add(1 + n * 4);
tTriangles.Add(2 + n * 4);
tTriangles.Add(2 + n * 4);
tTriangles.Add(3 + n * 4);
tTriangles.Add(0 + n * 4);
}
}
//赋值多边形顶点
tMesh.vertices = tVertices;
//赋值三角形点排序
tMesh.triangles = tTriangles.ToArray();
//tMesh.normals = normals;
//tMesh.normals = normals;
tMesh.uv = newUV;
//重新设置UV,法线
tMesh.RecalculateBounds();
tMesh.RecalculateNormals();
//将绘制好的Mesh赋值
tPolygon.GetComponent<MeshFilter>().mesh = tMesh;
}
public void SetMap(int id, Sprite sprite,bool fx)
{
float width = sprite.texture.width;
float height = sprite.texture.height;
//newUV[id*4] = new Vector2(sprite.rect.x / width, (sprite.rect.y + sprite.rect.height) / height)
if (fx)
{
newUV[id * 4] = new Vector2(sprite.rect.x / width, (sprite.rect.y + sprite.rect.height) / height);
newUV[id * 4 + 1] = new Vector2((sprite.rect.x + sprite.rect.width) / width, (sprite.rect.y + sprite.rect.height) / height);
newUV[id * 4 + 2] = new Vector2((sprite.rect.x + sprite.rect.width) / width, sprite.rect.y / height);
newUV[id * 4 + 3] = new Vector2(sprite.rect.x / width, sprite.rect.y / height);
}else
{
newUV[id * 4+1] = new Vector2(sprite.rect.x / width, (sprite.rect.y + sprite.rect.height) / height);
newUV[id * 4 + 0] = new Vector2((sprite.rect.x + sprite.rect.width) / width, (sprite.rect.y + sprite.rect.height) / height);
newUV[id * 4 + 3] = new Vector2((sprite.rect.x + sprite.rect.width) / width, sprite.rect.y / height);
newUV[id * 4 + 2] = new Vector2(sprite.rect.x / width, sprite.rect.y / height);
}
//tMesh.RecalculateBounds();
//tMesh.RecalculateNormals();
tMesh.uv = newUV;
}
public void SetMap2(int id )
{
newUV[id * 4] = new Vector2(0, 0);
newUV[id * 4 + 1] = new Vector2(0, 0);
newUV[id * 4 + 2] = new Vector2(0, 0);
newUV[id * 4 + 3] = new Vector2(0, 0);
//tMesh.RecalculateBounds();
//tMesh.RecalculateNormals();
tMesh.uv = newUV;
}
public void SetParent(Transform parent)
{
tPolygon.transform.SetParent(parent);
tPolygon.layer = parent.gameObject.layer;
tPolygon.transform.localPosition = Vector3.zero;
}
}