以下unity3d的C#代码是什么意思?
解决时间 2021-02-25 06:15
- 提问者网友:不爱我么
- 2021-02-25 00:35
Mesh NewMesh(GameObject g)
{
MeshFilter mf = g.GetComponent(); //网过滤器的网格
Vector2 _meshsize_ = new Vector2(1, 1); //代表2D向量和点
Mesh mesh = new Mesh();//网孔
mesh.vertices = new Vector3[] {
new Vector3(((_meshsize_.x/2) * -1), (_meshsize_.y/2) , 0),
new Vector3((_meshsize_.x/2) , (_meshsize_.y/2), 0),
new Vector3((_meshsize_.x/2) , ((_meshsize_.y/2) * -1), 0),
new Vector3(((_meshsize_.x/2) * -1) , ((_meshsize_.y/2) * -1), 0)
};
mesh.triangles = new int[] {
0,1,2,2,3,0
};
Vector2[] meshUV = new Vector2[] {
new Vector2(1,0), new Vector2(0,0),
new Vector2(0,1), new Vector2(1,1) };
mesh.uv = meshUV;
mesh.RecalculateBounds();
mesh.RecalculateNormals();
mf.mesh = mesh;
return mesh;
}
最佳答案
- 五星知识达人网友:从此江山别
- 2021-02-25 01:25
//创建一个网格
Mesh NewMesh(GameObject g)
{
//获得该物体的网格过滤器
MeshFilter mf = g.GetComponent(); //网过滤器的网格
//新建二维向量(1,1)
Vector2 _meshsize_ = new Vector2(1, 1); //代表2D向量和点
Mesh mesh = new Mesh();//新建网格
//新建点数组分别为物体g的相对位置(+/-0.5,+/-0.5,0)
mesh.vertices = new Vector3[] {
new Vector3(((_meshsize_.x/2) * -1), (_meshsize_.y/2) , 0),
new Vector3((_meshsize_.x/2) , (_meshsize_.y/2), 0),
new Vector3((_meshsize_.x/2) , ((_meshsize_.y/2) * -1), 0),
new Vector3(((_meshsize_.x/2) * -1) , ((_meshsize_.y/2) * -1), 0)
};
//新建三角形数组,在mesh中解读方式为三个一组,代表三角形三点
//0,1,2代表一个三角形,2,3,0代表另一个三角形,其中0,1,2......代表该mesh的点(vertices)数组的下标序号
mesh.triangles = new int[] {
0,1,2,2,3,0
};
//物体网格对应贴图的UV坐标
Vector2[] meshUV = new Vector2[] {
new Vector2(1,0), new Vector2(0,0),
new Vector2(0,1), new Vector2(1,1) };
//赋予mesh自己的UV数组
mesh.uv = meshUV;
//重新计算网格和数组,但一般来说RecalculateBounds();方法应该放在 mesh.RecalculateNormals();之后
mesh.RecalculateBounds();
mesh.RecalculateNormals();
mf.mesh = mesh;
return mesh;
}
//概括来说就是输入一个物体,然后将其网格换成一个1X1的平面正方形
全部回答
- 1楼网友:酒者煙囻
- 2021-02-25 02:46
//p.s.函数太长参数隐秘,分太少,这条至少30分才有正常人回答
//函数作用:在纹理上绘制自定义多线
void draw(vector2 point)//画画
{
//输入点在纹理上的像素值(参数没给全,我就估计一下,请理解为输入点的参数乘以某个常数)
int px = (int)((point.x / transform.localscale.x) * texwidth);
int py = (int)((point.y / transform.localscale.y) * texheight);
//根据信息生成一个像素点
point = new vector2(px, py);
//如果有上一个点
if (hasprevious)
{
//上一个点投影的像素值
int x = (int)previouspoint.x;
int y = (int)previouspoint.y;
//计算上一个点和现在的点纵横像素差距
int dx = (int)mathf.abs(point.x - x);
int dy = (int)mathf.abs(point.y - y);
//sx,sy两个点方向有关
int sx = -1;
if (x < point.x) sx = 1;
int sy = -1;
if (y < point.y) sy = 1;
// 不明觉厉的参数
if (brushsize > 40)
{
sx *= brushsize / 10;
sy *= brushsize / 10;
}
//纵横距离只差,根据此参数绘点
int err = dx - dy;
while (true)
{
//画一个点,估计记录在colors32draw数组中
drawpoint(new vector2(x,y));
//如果画的点与前一个点像素相同,停止,如果不是,在两点之间的画点
if (x == (int)point.x && y == (int)point.y)
break;
int e2 = 2 * err;
if (e2 > -dy)
{
err -= dy;
x += sx;
if ((sx > 0 && x > (int)point.x) || (sx < 0 && x < (int)point.x))
x = (int)point.x;
}
if (e2 < dx )
{
err += dx;
y += sy;
if ((sy > 0 && y > (int)point.y) || (sy < 0 && y < (int)point.y))
y = (int)point.y;
}
}
}
else
drawpoint(point);
//应用纹理上
texture2d tex = bd.renderer.material.maintexture as texture2d;
tex.setpixels32(colors32draw);
tex.apply();
hasprevious = true;
previouspoint = point;
}
我要举报
大家都在看
推荐资讯