Unity使用脚本生成立方体模型
unity版本2019.4.0f1
文件一览
记得给物体赋予材质!
CubeMesh.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeMesh : MonoBehaviour
{
MeshRenderer meshRenderer;
MeshFilter meshFilter;
MeshCollider meshCollider;
//存放顶点数据
List<Vector3> verts;
List<int> indices;
// Start is called before the first frame update
private void Start()
{
verts=new List<Vector3>();
indices=new List<int>();
meshRenderer=GetComponent<MeshRenderer>();
meshFilter=GetComponent<MeshFilter>();
meshCollider=GetComponent<MeshCollider>();
Generate();
}
public void Generate(){
ClearMeshData();
//填写数据
AddMeshData();
//传递数据给Mesh,生成真正网格
Mesh mesh=new Mesh();
mesh.vertices=verts.ToArray();
mesh.triangles=indices.ToArray();
//自动计算法线
mesh.RecalculateNormals();
//自动计算物体整体边界
mesh.RecalculateBounds();
meshFilter.mesh=mesh;
//碰撞体专用mesh,只负责物体碰撞外形
meshCollider.sharedMesh=mesh;
}
void ClearMeshData(){
verts.Clear();
indices.Clear();
}
void AddMeshData(){
verts.Add(new Vector3(0,0,0));
verts.Add(new Vector3(0,0,1));
verts.Add(new Vector3(1,0,1));
verts.Add(new Vector3(1,0,0));
verts.Add(new Vector3(0,1,1));
verts.Add(new Vector3(0,1,0));
verts.Add(new Vector3(1,1,1));
verts.Add(new Vector3(1,1,0));
//绘制第一个三角面片(顺时针)
indices.Add(0);
indices.Add(1);
indices.Add(2);//end first
indices.Add(0);
indices.Add(2);
indices.Add(3);//end second
indices.Add(0);
indices.Add(5);
indices.Add(4);//end third
}
// Update is called once per frame
void Update()
{
}
}
效果图:
解释一下,多个面片可以围成一个立方体,没绘制完三角面片😅
参考资料:
[1]https://www.bilibili.com/video/BV1FD4y1Q7uA/
[2]https://www.bilibili.com/video/BV1Dv411B76b/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」