當我們創建了一個空的遊戲對象:Gameobject,以及一個立方體Cube,此時Gameobject沒有任何的屬性,所以我們給其添加Mesh Filter屬性以及Mesh Renderer屬性,Mesh Filter屬性用來管理當前物體的mesh文件,mesh文件存放了物體的頂點信息,Mesh Renderer組件用來渲染當前物體。
我們可以給這個空的遊戲對象掛載一個腳本,然後獲取Cube的mesh以及Cube的material(材質),這樣我們就可以渲染出一模一樣的Cube。
腳本掛載之前:
掛載的腳本如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class mesh_test : MonoBehaviour
{
// 這個值可以在Unity的面板直接將Cube從Hierarchy面板拖進來賦值
public MeshFilter cub_mesh;
// Start is called before the first frame update
void Start()
{
// 獲取Gameobject的MeshFilter組件的mesh屬性,
Mesh self_mesh = GetComponent<MeshFilter>().mesh;
// 將Cube的mesh給Gameobject
Mesh mesh = cub_mesh.mesh;
// 獲取Cube的meshrenderer組件
MeshRenderer meshrender = cub_mesh.GetComponent<MeshRenderer>();
// 獲取Gameobjec的的meshrenderer組件
MeshRenderer self_meshrender = GetComponent<MeshRenderer>();
// 將Cube的材質給Gameobject
self_meshrender.material = meshrender.material;
// 首先清空一下Gameobject的meshfilter組件,然後將Cube mesh的屬性都給過來
self_mesh.Clear();
self_mesh.vertices = mesh.vertices;
self_mesh.triangles = mesh.triangles;
self_mesh.normals = mesh.normals;
self_mesh.uv = mesh.uv;
self_mesh.tangents = mesh.tangents;
// 重新計算一下GameObject的mesh
self_mesh.RecalculateBounds();
}
// Update is called once per frame
void Update()
{
}
}
掛載腳本運行之後,攝影機裏面就出現了兩個一模一樣的Cube: