游戏对象显示
在Unity中,新建一个Cube游戏对象,选中后,在Inspectori面板上你会看到该游戏对象上存有 MeshFilter、MeshRender,还有个Default-Material。正是因为有它们你才能看到这个Cube。(这里忽略Box Collider,与渲染无关)
Mesh网络
是指模型的网格,建模就是建网格。细看Mesh,可以知道Mesh的主要属性内容包括顶点坐标,法线,纹理坐标,三角形绘制序列等其他有用属性和功能。因此,建网格,就是画三角形,画三角形就是定位三个点。
MeshFilter网络过滤器
内包含一个Mesh组件,可以根据MeshFilter获得模型网格的组件,将其传递给网格渲染器(MeshRender)以便在屏幕上渲染。
MeshRender网格渲染器
是用于把网格渲染出来的组件。MeshFilter的作用就是把Mesh扔给MeshRender,将模型或者说是几何体绘制显示出来。
Material材质
材质定义了物体表面外观。其就是一个数据集,用来给渲染器MeshRender提供数据和光照算法。一般Material会使用特定的Shader,并在编辑器中显示了Shader的可调属性来方便调试。
更改材质颜色
- 直接修改材质球
public class Test1 : MonoBehaviour
{
public Material m_mat;
// Start is called before the first frame update
void Start()
{
m_mat.color = Color.white;
}
// Update is called once per frame
void Update()
{
}
}
特点: 这样写会直接修改资源中材质球的颜 色,会导致所有使用这个材质球的物体都改变颜色,而且是永久性修改, 在程序结束也不会修改回来。 2. 实例化材质球
public class Test2 : MonoBehaviour
{
public GameObject m_cube;
// Start is called before the first frame update
void Start()
{
m_cube.GetComponent<MeshRenderer>().material.color = Color.red;
}
// Update is called once per frame
void Update()
{
}
}
特点:这样的写法相当于实例化了一个材质球,保存在内存中;程序结束,这个材质球也会被销毁。这样就不会改变资源中材质球的颜色了,也不会影响其他使用这个材质球的物体了
Resources文件夹
将需要加载到场景中的资源放置在Assets目录下的Resources文件夹中,就可以通过 Unity提供的API来加载这些资源了。
关于Resources的方法:
FindObjectsOfTypeAll:返回某一种类型的所有资源
Load:通过路径加载资源
LoadAl1:加载该Resources下的所有资源
LoadAsync:异步加载资源,通过协程实现
UnloadAsset:卸载动加载的资源
UnloadUnusedAssets:卸载在内存分钟未使用的资源
更换材质
非运行时
直接拖拽个新材质给游戏对象赋值就可以了
运行时
void Start()
{
Material mat = Resources.Load("更换材质") as Material;
if(mat != null)
{
Renderer render = GetComponent<Renderer>();
render.sharedMaterial = mat;
}
else
{
Debug.Log("材质加载失败");
}
}