Unity高級功能—獲取其他對象的mesh,來顯示創建的空對象

當我們創建了一個空的遊戲對象: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:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章