Unity中用Mesh画一个圆环

本文介绍了如何在Unity中利用Mesh生成一个1/4空心圆柱体,主要讨论了ProBuilder的Arch功能,并详细解释了生成圆形面的原理和步骤,包括确定三角形顶点位置、法线方向以及UV坐标的设置。
摘要由CSDN通过智能技术生成

Probuider

前几天在做一个小项目的时候,用到了Unity自带的一个包ProBuilder其中的Arch生成1/4圆。

挺好玩的,可以在直接Unity中根据需要用Mesh定制生成图形,而不用建模软件。

但是存在一个小问题,就是在使用的时候他的中心点是在生成图形的左下角。

旋转的时候不符合我的需求,我想要的是生成的时候旋转中心在圆心的位置,所以准备自己定制一个。

目标

关于Mesh生成图形的原理可以参考这篇文章,讲得虽然不算很详细,但足够了解基本概念了。

目标是生成下面图中的一个1/4空心圆柱体

我们切换到Wireframe模式下,可以看出它是有一个一个的顶点,并通过一条条的直线连接起来。那么我们如何确定这些顶点和线的位置呢?

小目标-生成一个面

其实很简单的,我们一步一步慢慢来。一次生成一整个会有点麻烦,我们可以一面一面来。只要生成了第一个面,其他的面也是类似的方法生成就好。

在前面我们提到了我们要的是生成一个圆柱体,圆柱体一个的重要性质就是可以由一个圆形叠加产生,也就是只要我们生成一个圆形,就完成了大部分的工作。

我们知道3D建模就是由一个一个的三角形组合成的,所以我们要用三角形来模拟来一个空心的圆。

在Probuilder中生成这样一个空心圆柱体用的是Arch,它有几个参数,分别是
\(\color{#1E90FF}{Radius}\) 半径,圆心到最外圈的距离
\(\color{#1E90FF}{Thickness}\) 厚度,圆心到最外圈的距离-圆心到最内圈的距离
\(\color{#1E90FF}{Depth}\) 深度
\(\color{#1E90FF}{NumberOfSides}\) 由多少个面组成,面越多越平滑,性能也越差
\(\color{#1E90FF}{DrawArchDegrees}\) 总共绘制的角度

\(\color{#1E90FF}{NumberOfSides}\)中的面是指由两个三角形一头一尾拼成的梯形,多个头大脚小的梯形拼在一起便成了我们需要的圆形。

原理已经知道了,那下一步只要确定三角形顶点的位置就OK了。至于如何确定三角形顶点的位置,我们可以再看下这张图。

Unity中,您可以使用NavMesh来创建路点,并使用Line Renderer来在路点之间绘制直线。 1. 创建NavMesh: 首先,您需要为场景创建NavMesh。打开Unity的导航窗口(Window->Navigation),选择场景中的所有可行走区域,并点击“Bake”按钮。这将创建一个NavMesh,它将指定场景中的可行走区域。 2. 创建路点: 在创建路点之前,您需要将一个空游戏对象添加到场景中。然后,将NavMeshAgent组件添加到该游戏对象。NavMeshAgent组件将使该对象能够在NavMesh上移动。接下来,您可以使用NavMeshAgent对象的“SetDestination”函数来设置路点。您可以在代码中使用该函数或者在Unity编辑器中手动设置路点。 3. 绘制线条: 为了在路点之间绘制线条,您需要将Line Renderer组件添加到NavMeshAgent对象上。然后,将Line Renderer的“Position Count”属性设置为路点的数量。最后,您可以在代码中使用Line Renderer的“SetPosition”函数来设置每个路点的位置。 下面是一个简单的示例代码,用于在场景中创建一个由路点组成的线条: ``` using UnityEngine; using System.Collections; public class PathDrawer : MonoBehaviour { public NavMeshAgent agent; public LineRenderer line; void Start () { line.positionCount = 0; } void Update () { if (agent.hasPath) { line.positionCount = agent.path.corners.Length; line.SetPositions(agent.path.corners); } else { line.positionCount = 0; } } } ``` 在这个示例中,我们将NavMeshAgent和Line Renderer组件分别分配给“agent”和“line”变量。在Start函数中,我们将线条的位置计数设置为0。在Update函数中,如果NavMeshAgent有路径,则将线条的位置计数设置为路径的角落数,并将每个角落的位置设置为线条的位置。否则,我们将线条的位置计数设置为0,这将清除线条。 希望这可以帮助您在Unity中使用路点绘制线条。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值