当我们创建了一个空的游戏对象: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: