【Unity】构建圆角立方体

https://catlikecoding.com/unity/tutorials/rounded-cube/

在本教程,我们将用单一的网格创建圆形立方体。

遵循程序网格。是为Unity 5.0.1及以上版本制作的。

【Unity】构建圆角立方体

各种形状的圆形立方体

合成一个立方体

在解决了二维网格之后,下一步骤是生成三维结构。

来看看一个立方体。从概念上讲,它由六个2D面组成,这些面的位置和旋转使它们包围了一个3D体积。可以用网格的六个实例来完成这个任务。

网格位于XY平面内,面向负Z方向。这就是立方体的-Z面。可以通过复制它来创建+Z面,把它的Y旋转设置为180°,然后重新定位,使两个面都对齐。

-X和+X面的创建方法相同,但Y旋转为90°和270°。如果想的话,也可以给这些面一个不同于Z面的X尺寸,但它们的Y尺寸必须匹配。这四个面必须对齐,以便它们形成一个封闭的环。

-Y和+Y面的X旋转角度为270°和90°。它们的X尺寸应该与Z面的尺寸一致,它们的Y尺寸应该与X面的X尺寸一致。

【Unity】构建圆角立方体

现在有由六个独立网格组成的立方体。虽然看起来没问题,但并不是很实用。可以通过Mesh.CombineMeshes来组合这些网格,但不妨一次性创建整个立方体。

创建立方体的顶点

为了创建自己的立方体,需要创建一个新的组件脚本。

让我们通过之前教程中的一些代码来引导它。现在唯一的新东西是第三维,所以必须添加zSize。使用一个循环程序和小工具来帮助可视化正在发生的事情。

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
public class Cube : MonoBehaviour {

    public int xSize, ySize, zSize;

    private Mesh mesh;
    private Vector3[] vertices;

    private void Awake () {
        StartCoroutine(Generate());
    }

    private IEnumerator Generate () {
        GetComponent<MeshFilter>().mesh = mesh = new Mesh();
        mesh.name = "Procedural Cube";
        WaitForSeconds wait = new WaitForSeconds(0.05f);

        yield return wait;
    }

    private void OnDrawGizmos () {
        if (vertices == null) {
            return;
        }
        Gizmos.color = Color.black;
        for (int i = 0; i < vertices.Length; i++) {
            Gizmos.DrawSphere(vertices[i], 0.1f);
        }
    }
}

现在可以在场景中添加一个新的游戏对象,通过添加这个组件把它变成一个立方体。或者替换一个现有对象的网格组件。

【Unity】构建圆角立方体

在增加立方体顶点之前,首先要知道有多少个顶点。我们已经知道一个面所需的顶点数量。

katex(#y+1)[/katex]

把这六个面加在一起,得到总数。

[katex]2((#x+1)(#y+1)+(#x+1)(#z+1)+(#y+1)(#z+1))[/katex]

然而,由于面边缘相互接触,顶点会重叠,导致顶点的重复。立方体的每个角的顶点都是三倍,而其边缘的顶点都是2倍。

【Unity】构建圆角立方体

剩下的请跳转原文。

给TA充电
共{{data.count}}人
人已充电
编程

【C#】async和await的本质

2021-12-29 20:17:15

编程

【C】VS安装与配置

2022-1-29 11:56:17

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
搜索