Unity日常笔记

148 阅读2分钟

游戏对象显示

在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的可调属性来方便调试。

更改材质颜色

  1. 直接修改材质球
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("材质加载失败");
    }
    
}