Unity3d 如何从法线和uv统一创建网格?

Unity3d 如何从法线和uv统一创建网格?,unity3d,normals,vertices,uv-mapping,Unity3d,Normals,Vertices,Uv Mapping,嗨,我有来自API的数据,我知道它是一个立方体: { "position": { "itemSize": 3, "type": "Float32Array", "array": [ 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5,

嗨,我有来自API的数据,我知道它是一个立方体:

    {
  "position": {
    "itemSize": 3,
    "type": "Float32Array",
    "array": [
      0.5,
      0.5,
      0.5,
      0.5,
      0.5,
      -0.5,
      0.5,
      -0.5,
      0.5,
      0.5,
      -0.5,
      -0.5,
      -0.5,
      0.5,
      -0.5,
      -0.5,
      0.5,
      0.5,
      -0.5,
      -0.5,
      -0.5,
      -0.5,
      -0.5,
      0.5,
      -0.5,
      0.5,
      -0.5,
      0.5,
      0.5,
      -0.5,
      -0.5,
      0.5,
      0.5,
      0.5,
      0.5,
      0.5,
      -0.5,
      -0.5,
      0.5,
      0.5,
      -0.5,
      0.5,
      -0.5,
      -0.5,
      -0.5,
      0.5,
      -0.5,
      -0.5,
      -0.5,
      0.5,
      0.5,
      0.5,
      0.5,
      0.5,
      -0.5,
      -0.5,
      0.5,
      0.5,
      -0.5,
      0.5,
      0.5,
      0.5,
      -0.5,
      -0.5,
      0.5,
      -0.5,
      0.5,
      -0.5,
      -0.5,
      -0.5,
      -0.5,
      -0.5
    ],
    "normalized": false
  },
  "normal": {
    "itemSize": 3,
    "type": "Float32Array",
    "array": [
      1,
      0,
      0,
      1,
      0,
      0,
      1,
      0,
      0,
      1,
      0,
      0,
      -1,
      0,
      0,
      -1,
      0,
      0,
      -1,
      0,
      0,
      -1,
      0,
      0,
      0,
      1,
      0,
      0,
      1,
      0,
      0,
      1,
      0,
      0,
      1,
      0,
      0,
      -1,
      0,
      0,
      -1,
      0,
      0,
      -1,
      0,
      0,
      -1,
      0,
      0,
      0,
      1,
      0,
      0,
      1,
      0,
      0,
      1,
      0,
      0,
      1,
      0,
      0,
      -1,
      0,
      0,
      -1,
      0,
      0,
      -1,
      0,
      0,
      -1
    ],
    "normalized": false
  },
  "uv": {
    "itemSize": 2,
    "type": "Float32Array",
    "array": [
      0,
      1,
      1,
      1,
      0,
      0,
      1,
      0,
      0,
      1,
      1,
      1,
      0,
      0,
      1,
      0,
      0,
      1,
      1,
      1,
      0,
      0,
      1,
      0,
      0,
      1,
      1,
      1,
      0,
      0,
      1,
      0,
      0,
      1,
      1,
      1,
      0,
      0,
      1,
      0,
      0,
      1,
      1,
      1,
      0,
      0,
      1,
      0
    ],
    "normalized": false
  }
}

我现在如何从这些数据中创建一个统一的立方体及其材质?是否有库或内置函数?

首先,一般来说,要将JSON数据解析为有用的结构,您需要有相应的类结构和用途,例如
JsonUtility

[可序列化]
公共类数据集
{
公共整数项目大小;
公共int[]数组;
公共图书馆规范化;
}
[可序列化]
公开课范例
{
公众立场;
公共数据集正常;
公共数据集;
}

var data=JsonUtility.FromJson(yourJsonString);

接下来,这些数据仍然是非常原始的,我们必须进一步解析它,因为我们需要有效的向量值

var顶点=新列表();
对于(变量i=0;idata.position.array.Length-1)中断;
var x=data.position.array[i];
var y=data.position.array[i+1];
var z=data.position.array[i+2];
添加(新向量3(x,y,z));
}
法线和UV的情况也类似(只是这里使用的是
Vector2


然后是主要问题:因为你已经有了位置(我假设顶点)、法线和UV,我想你想知道从哪里得到三角形

UV在这里没有任何帮助,因为它们只是纹理坐标,定义了纹理稍后如何映射到三角形上

在这里,法线也帮不了你。法线只是一个方向,不提供任何关于三个顶点一起构成三角形的有用信息

只有当您知道(例如)始终有3个连续顶点组成一个三角形时,才能获取三角形-这意味着您的网格具有重复的顶点

否则,我会说,不可能从给定的数据中知道三角形

在Unity中,三角形只是一个平面
int[]
,其中始终有三个连续元素是顶点数组中三个顶点的索引

所以在一个假设下,它们只是

var triangles=newint[vertices.Length];
对于(变量i=0;i
然后你可以简单地把它们放在一起,创建一个网格,就像

var-mesh=new-mesh();
网格顶点=顶点;
mesh.triangles=三角形;
//等