各组件作用
- 我们可以在MeshFilter组件里面获取mesh对象
- 在mesh对象里面获取vertex,uv坐标,并且指定这些坐标
- 下面是动态生成一个物体并且指定材质的代码
using UnityEngine;
using System.Collections;
public class TextureTest : MonoBehaviour
{
private Mesh mh;
private Renderer rd;
public Material mat;
void Awake()
{
GameObject obj = new GameObject();
mh = obj.AddComponent<MeshFilter>().mesh;
rd = obj.AddComponent<MeshRenderer>();
CreateBar( );
}
//更改模型顶点位置
public float one;
public float two;
public float three;
void CreateBar()
{
this.barIndex = barIndex;
//顶点数组
Vector3[] vertes = new Vector3[]
{
new Vector3(one, 0, 0),//第一个点
new Vector3(0, two, 0), //第二个
new Vector3(0, 0, three), //第三个
};
//给网格的顶点赋值
mh.vertices = vertes;
//顶点组成的三角形
mh.triangles = new[]
{
0, 1, 2,
2, 1, 0 //正反面都要渲染
};
//UV贴图的四个点,和顶点一一对应,左下角为(0,0),右上角为(1,1)
//如果顶点顺序没有跟UV对应,贴图就会出现问题
Vector2[] uvs = new Vector2[]
{
new Vector2(0, 0),//第一个点
new Vector2(1,1), //2
new Vector2(0.5f , 1)//3
};
mh.uv = uvs;
//材质
rd.material = mat;
//法线重新计算
mh.RecalculateNormals();
}
private void Update() {
if(Input.GetKeyDown(KeyCode.Space)){
CreateBar();
}
}
}