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:

 

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