1.效果图
2.代码实现
创建一个空对象将代码脚本挂上即可
(1)此方法是使用24个顶点实现
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(MeshFilter))]
[RequireComponent(typeof(MeshRenderer))]
public class DrawMesh : MonoBehaviour
{
Mesh mesh;
[SerializeField]
Texture2D texture2D; //要赋上的图片 手动拖
// Start is called before the first frame update
void Start()
{
mesh = new Mesh();
Vector3 pos= transform.position;
// 设定的顶点坐标是从左下顺时针
//顶点位置
mesh.vertices = new Vector3[] {
// 完整的
new Vector3(-0.5f,-0.5f,-0.5f), new Vector3(-0.5f, 0.5f, -0.5f), new Vector3(0.5f,0.5f,-0.5f) ,new Vector3(0.5f,-0.5f,-0.5f), //前面
new Vector3(0.5f,-0.5f,0.5f), new Vector3(0.5f, 0.5f, 0.5f), new Vector3(-0.5f,0.5f,0.5f) ,new Vector3(-0.5f,-0.5f,0.5f) , //后面
new Vector3(-0.5f,-0.5f,0.5f), new Vector3(-0.5f, 0.5f, 0.5f), new Vector3(-0.5f,0.5f,-0.5f) ,new Vector3(-0.5f,-0.5f,-0.5f) , //左面
new Vector3(0.5f,-0.5f,-0.5f), new Vector3(0.5f, 0.5f, -0.5f), new Vector3(0.5f,0.5f,0.5f) ,new Vector3(0.5f,-0.5f,0.5f) , //右面
new Vector3(-0.5f,0.5f,-0.5f), new Vector3(-0.5f, 0.5f, 0.5f), new Vector3(0.5f,0.5f,0.5f) ,new Vector3(0.5f,0.5f,-0.5f) , //上面
new Vector3(-0.5f,-0.5f,0.5f), new Vector3(-0.5f, -0.5f, -0.5f), new Vector3(0.5f,-0.5f,-0.5f) ,new Vector3(0.5f,-0.5f,0.5f) //下面
};
//三角形索引
mesh.triangles = new int[] {
0, 1, 2 ,0,2,3, //前面
4, 5, 6 , 4,6,7, //后面
8, 9, 10 , 8,10,11, //左面
12, 13, 14 , 12,14,15, //右面
16, 17, 18 , 16,18,19, //上面
20, 21, 22 , 20,22,23, //下面
};
// uv 贴图 注意一定要对奇 不然图片可能歪或者不完整
mesh.uv = new Vector2[] {
new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1), new Vector2(1, 0),
new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1), new Vector2(1, 0),
new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1), new Vector2(1, 0),
new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1), new Vector2(1, 0),
new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1), new Vector2(1, 0),
new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1), new Vector2(1, 0)
};
mesh.RecalculateNormals(); // 法线
GetComponent<MeshFilter>().mesh = mesh;
Material mat = new Material(Shader.Find("Standard"));
mat.mainTexture = texture2D;
GetComponent<MeshRenderer>().material = mat;
}
}
(2)此方法是使用8个顶点实现
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(MeshFilter))]
[RequireComponent(typeof(MeshRenderer))]
public class CrateTwo : MonoBehaviour
{
Mesh mesh;
// Start is called before the first frame update
void Start()
{
mesh = new Mesh();
mesh.vertices = new Vector3[] {
Vector3.zero,new Vector3(0,1,0),new Vector3(1,1,0),new Vector3(1,0,0), //前面
new Vector3(1,0,1),new Vector3(1,1,1),new Vector3(0,1,1),new Vector3(0,0,1) //后面
};
mesh.triangles = new int[]
{
0,1,2,0,2,3, //前
4,5,6,4,6,7, //后
7,6,1,7,1,0, //左
3,2,5,3,5,4, //右
1,6,5,1,5,2, //上
7,0,3,7,3,4, //下
};
mesh.RecalculateNormals();
GetComponent<MeshFilter>().mesh = mesh;
Material mat = new Material(Shader.Find("Standard"));
GetComponent<Renderer>().material = mat;
}
}
小菜不易,感谢观看,学到了就留下个支持的赞吧!
关注我,了解更多Unity相关知识哦!