unity编辑器拓展七——脚本创建模型
2017-12-22 15:48
369 查看
描述:
其实这个教程到处都是,我真正想做的是把模型分成N个等分,实现动态加载。但是在网上搜索了很久,也没有搜索到合适的方法,要么就是不写清楚,舍不得把代码全部放出来。要么就是自带地形的切割,最想要的是,t4m 刷完后直
接将模型分成N分,所以只能苦逼的从最mesh最基础的开始学吧。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System;
public class CreatMesh : Editor {
[MenuItem("tool/creatMesh")]
static void CreaMesh()
{
creatVertAadTriangels();
}
//创建顶点 三角面
static void creatVertAadTriangels()
{
/*mesh属性
* 长宽
* 段数
*/
Vector2 size = new Vector3(10, 10); //长宽(因为是平面,所以就xy了 不要高度了)
Vector2 segment =new Vector2 (10,10);//xy段数
/*mesh组成部分
* 顶点
* uv
* 三角形索引
* 法线
*/
Vector3[] verters;//顶点数组
Vector2[] uv;//uv数组
int[] triangles; //三角形索引
//1.顶点数组赋值
int countVert = Mathf.FloorToInt ((segment.x + 1) * (segment.y + 1)); //根据长宽计算出总的顶点数 转换成int类型
float w = size.x / segment.x; //计算每一段的宽度
float h = size.y / segment.y; //计算每一段的长度
int index01 = 0;
verters = new Vector3[countVert];
uv = new Vector2[countVert];
for (int i = 0; i < segment.y + 1; i++)
{
for (int j = 0; j < segment.x + 1; j++)
{
verters[index01] = new Vector3(j * w, 0, i * h); //创建每个点 (按照xy的段数距离)并且给顶点数组赋值
float u = j / segment.x; //每个点在u上面的位置
float v = i / segment.y; //每个点在v上面的位置
uv[index01] = new Vector2(u, v); //将每个点的uv加到uv数组里面
index01++;
}
}
Vector2[] uv02 = new Vector2[] {new Vector2(0,0), new Vector2(0.5f, 0), new Vector2(1, 0), new Vector2(0, 1), new Vector2(0.5f, 1), new Vector2(1, 1), };
//3.三角形
int countVertTri = Mathf.FloorToInt ( segment.x * segment.y * 6); //三角形顶点总数:每1*1段有两个三角形组成 两个三角形有6个点(包含公用的两个点),所有总点数 是段数*6
int index02 = 0;
triangles = new int[countVertTri];
for (int i = 0; i < segment.y; i++)
{
for (int j = 0; j < segment.x; j++)
{
//顺时针
int role = Mathf.FloorToInt (segment.x) + 1; //x方向顶点数
int self = j + (i * role); // i=0 j=0的时候 第0行第0个点 i=0 j=1的时候 第0行第1个点
int next = j + ((i + 1) * role); // i=0 j=0的时候 第1行第0个点 i=0 j=1的时候 第1行第1个点
//第一个正方形
//顺时针
//第一个三角形
triangles[index02] = self; //i=0 j=0的时候 第0行0个点
triangles[index02 + 1] = next; //i=0 j=0的时候 第1行0个点
triangles[index02 + 2] = next + 1; //i=0 j=0的时候 第1行1个点
//第二个三角形
triangles[index02 + 3] = self; //i=0 j=0的时候 第0行0个点
triangles[index02 + 4] = next + 1; //i=0 j=0的时候 第1行1个点
triangles[index02 + 5] = self + 1; //i=0 j=0的时候 第0行1个点
//一次可以实现6个点的排序,两个三角形 拼成一个正方形
//随着j index的增加 绘制第一行的所有正方形 随着i的增加 一行一行的向上绘制
index02 += 6;
}
}
//渲染
//新建mesh,并对它的属性赋值
Mesh me = new Mesh();
me.vertices = verters; //mesh顶点赋值
me.triangles = triangles; //mesh三角形索引赋值
me.uv = uv;
me.RecalculateNormals(); //自动添加法线信息
//新建材质球
Material ma = new Material(Shader.Find("Diffuse"));
//新建模型,将mesh跟material给他赋值
GameObject m_gameObject = new GameObject("m_newOBJ");//新建一个gameobject
m_gameObject.AddComponent<MeshFilter>().sharedMesh = me; //增加meshFilter组件
m_gameObject.AddComponent<MeshRenderer>().sharedMaterial = ma;//增加MeshRenderer组件
}
}
相关文章推荐
- Unity-编辑器创建Lua脚本模版-热更新
- Unity编辑器拓展之五:修改脚本icon
- unity编辑器拓展八——unity里面分离模型
- unity编辑器拓展九——删除场景中丢失的脚本
- Unity编辑器拓展【C#脚本程序基础】
- Unity Editor 编辑器扩展 七 创建脚本模版
- UnityProject面板中右键创建新的Lua脚本以及修改文件默认打开方式的编辑器
- 【unity编辑器拓展】使用脚本添加Prefab到场景中
- Unity编辑器Visual Studio Code的脚本模板(Script Templates)设置
- Unity自定义创建脚本模板菜单
- 使用纹理制作特效 - 在Unity编辑器中创建程序纹理贴图
- unity编辑器拓展六——不实例化的情况下修改Assets下面的文件
- Unity插件 - MeshEditor(二) 模型网格编辑器(高级)
- 如何设置Unity的脚本编辑器为VS
- 创建脚本编辑器
- Unity修改C#默认创建Script 脚本格式
- unity中脚本编辑器UnIDE
- unity, 用脚本创建mesh
- Unity Shaders and Effects Cookbook (3-2) 创建简单的 Phong 高光 光照模型
- Unity3D解构Unity的脚本物件模型