unity创建的立方体如何去掉一面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity创建的立方体如何去掉一面相关的知识,希望对你有一定的参考价值。

参考技术A 要将一个立方体去掉一个面,可以用以下几种方法:
1、创建一个立方体,右键转为可编辑多边形,在多边形级别,选择其中一个面,删除。
2、创建一个矩形,添加挤出修改器,去掉封口始端或封口末端的勾。
3、创建一个矩形和一条线,放样,封口始端和封口末端两个勾去掉一个。

如何在 Unity 中从法线和 uv 创建网格?

【中文标题】如何在 Unity 中从法线和 uv 创建网格?【英文标题】:How to create a Mesh from normals and uv in Unity? 【发布时间】:2020-09-14 17:40:15 【问题描述】:

您好,我有来自 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
  

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

【问题讨论】:

【参考方案1】:

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

[Serializable]
public class DataSet

    public int itemSize;
    public int[] array;
    public bool normalized;


[Serializable]
public class Example

    public DataSet position;
    public DataSet normal;
    public DataSet uv;

然后做

var data = JsonUtility.FromJson<Example>(yourJsonString);

接下来这个数据还是很原始的,我们需要进一步解析它,因为我们需要有效的向量值

var vertices = new List<Vector3>();

for(var i = 0; i < data.position.array.Length; i+=3)

    if(i+2 > data.position.array.Length - 1) break;

    var x = data.position.array[i];
    var y = data.position.array[i+1];
    var z = data.position.array[i+2];
    vertices.Add(new Vector3(x,y,z));

法线和 UV 也类似(只是在这里你使用 Vector2 代替)


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

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

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

只有在你知道例如总是 3 个连续的顶点组成一个三角形 - 这意味着您的网格有重复的顶点。

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

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

所以在一个假设下,它们只是类似的结果

var triangles = new int[vertices.Length]; 
for(var i = 0; i < triangles.Length; i++)

    triangles[i] = i;

然后你可以简单地将它们放在一起并创建一个类似的网格

var mesh = new Mesh();
mesh.vertices = vertices;
mesh.triangles = triangles;
// Etc

【讨论】:

以上是关于unity创建的立方体如何去掉一面的主要内容,如果未能解决你的问题,请参考以下文章

Unity 应用程序中的独立元素

unity 3d实例:创建游戏对象旋转的立方体Unity3D Button图片按钮Box控件Label控件Background ColorColor

Unity Shaders and Effects Cookbook (4-1)(4-2)静态立方体贴图的创建与使用

unity3d的playmaker插件使用教程,对象出入触发,声音播放

unity---Mesh网格编程

unity---Mesh网格编程