using UnityEditor;
using UnityEngine;
[RequireComponent(typeof(MeshRenderer), typeof(MeshFilter))]
public class Mesh_RectangleTest : MonoBehaviour
{
private float sideLength = 2;//边长
private float angleDegree = 45;//角度
private MeshFilter m_MeshFilter;
private MeshRenderer m_MeshRenderer;
void Start()
{
m_MeshFilter = GetComponent<MeshFilter>();
m_MeshRenderer = GetComponent<MeshRenderer>();
//绘制了一个等腰三角形
m_MeshFilter.mesh = CreateMesh();
m_MeshRenderer.material = CreateMaterial();
}
private Material CreateMaterial()
{
Material material = new Material(Shader.Find("Transparent/Diffuse"));
Texture2D texture = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/11.png");
material.mainTexture = texture;
return material;
}
private Mesh CreateMesh()
{
Mesh mesh = new Mesh();
Vector3[] vertices = new Vector3[4];
float angle = Mathf.Deg2Rad * angleDegree;
float cosA = Mathf.Cos(angle);
float sinA = Mathf.Sin(angle);
float halfOfBaseSide = cosA * sideLength;
float height = sinA * sideLength;
//设置顶点
vertices[0] = Vector3.zero;
vertices[1] = new Vector3(halfOfBaseSide, -height, 0);
vertices[2] = new Vector3(-halfOfBaseSide, -height, 0);
vertices[3] = new Vector3(halfOfBaseSide * 2, 0, 0);
mesh.vertices = vertices;
//三角形列表,保存的是对应顶点数组的索引
int[] triangles = new int[6];
//顺时针绘制正面,逆时针绘制反面
//左下三角形
triangles[0] = 0;
triangles[1] = 1;
triangles[2] = 2;
//右上三角形
triangles[3] = 0;
triangles[4] = 3;
triangles[5] = 1;
mesh.triangles = triangles;
//uv是uv纹理坐标的简称
//UV就是将图像上每一个点精确对应到模型物体的表面, 在点与点之间的间隙位置由软件进行图像光滑插值处理. 这就是所谓的UV贴图
//uv坐标系是以左下角为(0,0),右上角为(1,1)的坐标系
Vector2[] uvs = new Vector2[vertices.Length];
uvs[0] = Vector2.zero;
uvs[1] = Vector2.right;
uvs[2] = Vector2.up;
uvs[3] = Vector2.one;
mesh.uv = uvs;
//设置法线
Vector3[] normals = new Vector3[vertices.Length];
normals[0] = Vector3.forward;
normals[1] = Vector3.forward;
normals[2] = Vector3.forward;
normals[3] = Vector3.forward;
mesh.normals = normals;
mesh.name = "triangle";
return mesh;
}
}