线渲染器 (Line Renderer)
线渲染器 (Line Renderer) 组件采用 3D 空间中两个或多个点的数组,在每个点之间绘制一条直线。因此,单个线渲染器组件可用于绘制从简单直线到复杂螺旋线的任何线条。这条线始终是连续的;如果需要绘制两条或更多完全独立的线,则应使用多个游戏对象,每个游戏对象都要有自己的线渲染器。
线渲染器不渲染一个像素宽的线。此渲染器将渲染宽度采用世界单位且可纹理化的公告牌线(总是面向摄像机的多边形)。线渲染器使用与轨迹渲染器 (Trail Renderer) 相同的线渲染算法。
属性
属性功能Cast Shadows确定线是否投射阴影,是应从线的一侧还是两侧投射阴影,或线是否应仅投射阴影而不以其他方式进行绘制。请参阅脚本 API 参考文档中的 Renderer.shadowCastingMode 以了解更多信息。Receive Shadows如果启用此属性,线将接受阴影。Motion Vectors选择要用于此线渲染器的运动矢量 (Motion Vector) 类型。请参阅脚本 API 参考文档中的 Renderer.motionVectorGenerationMode 以了解更多信息。Materials这些属性描述了用于渲染线的材质数组。对于数组中的每种材质,该线将被绘制一次。Light Parameters在此处引用光照贴图参数 (Lightmap Parameters) 资源以使线与全局光照系统交互。Positions这些属性描述了要连接的 Vector3 点数组。Use World Space如果启用此属性,这些点将视为世界空间坐标,而不受此组件附加到的游戏对象的变换所影响。Loop启用此属性可连接线的第一个和最后一个位置。这样会形成闭环。Width定义宽度值和曲线以控制线在其开始和结束之间的各个点处的宽度。曲线仅在每个顶点处采样,因此其精度受到线中存在的顶点数量的限制。线的总宽度由宽度值控制。Color定义一个渐变来控制线沿其长度的颜色。Corner Vertices此属性指示在绘制线中的角时使用多少个额外顶点。增加此值可使线的角显得更圆。End Cap Vertices此属性指示使用多少个额外顶点在线上创建端盖。增加此值可使线的端盖显得更圆。Alignment设置为 View 可使线面向摄像机,或设置为 Local 根据线的变换组件的方向对齐。Texture Mode控制如何将纹理应用于线。使用 Stretch 可沿着线的整个长度应用纹理贴图,或使用 Wrap 使纹理沿着线的长度重复。应使用材质 (Material) 中的 Tiling 参数来控制重复率。Shadow Bias沿着光照方向移动阴影以消除因使用公告牌几何体来模拟体积而导致的阴影瑕疵。Generate Lighting Data如果启用此属性(选中复选框),则在构建线几何体时包含法线和切线。这样允许它使用具有场景光照的材质,例如通过标准着色器,或通过使用自定义着色器。Sorting Layer渲染器排序图层的名称。Order in Layer此渲染器在排序图层中的顺序。Light Probes基于探针的光照插值模式。Reflection Probes如果启用此属性,并且场景中存在反射探针,则会为此线渲染器拾取反射纹理,并将此纹理设置为内置的着色器 uniform 变量。
详细信息
要创建线渲染器,请执行以下操作:
1.在 Unity 菜单栏中,选择 GameObject > Create Empty 1.在 Unity 菜单栏中,选择 Component > Effects > Line Renderer 1.将纹理或材质拖到线渲染器上。如果在材质中使用粒子着色器,则效果最佳。
提示
- 线渲染器对于需要在一帧中布置所有顶点的效果非常有用。
- 移动摄像机时,线可能会随之旋转。这是 Alignment 设置为 View 时的预期效果。将 Alignment 设置为 Local 即可禁用此功能。
- 线渲染器应该是游戏对象上的唯一渲染器。
- Unity 在每个顶点处从颜色渐变 (Color Gradient) 中采样颜色。在每个顶点之间,Unity 对颜色应用线性插值。向线渲染器添加更多顶点可能会更接近详细的颜色渐变。
线渲染器示例设置
API参考
线渲染器描述
线渲染器用于在 3D 空间中绘制自由浮动的线。
此类是线渲染器组件的脚本接口。
变量
alignment选择线是朝向摄像机还是变换组件的方向。colorGradient设置颜色渐变,用于描述线在其长度上各个点处的颜色。endColor设置线终点处的颜色。endWidth设置线终点处的宽度。generateLightingData配置线以生成法线和切线。借助此数据,场景光照可以通过法线贴图和 Unity 标准着色器或是您自己的定制着色器来影响线。loop将线的起点和终点位置连接在一起,以形成连续循环。numCapVertices将它设置为大于 0 的值,可在线的每端上获得圆角。numCornerVertices将它设置为大于 0 的值,可在线的每个细分段之间获得圆角。positionCount设置/获取顶点数。shadowBias应用阴影偏差以防止自我阴影瑕疵。指定的值是每一段的线宽比例。startColor设置线起点处的颜色。startWidth设置线起点处的宽度。textureMode选择线纹理的 U 坐标是进行平铺还是拉伸。useWorldSpace如果启用,则在世界空间中定义线。widthCurve设置曲线,用于描述线在其长度上各个点处的宽度。widthMultiplier设置一个整体乘数,它应用于 LineRenderer.widthCurve 以获取线的最终宽度。
公共函数
BakeMesh创建 LineRenderer 的快照并将其存储在 mesh 中。GetPosition获取线中某个顶点的位置。GetPositions获取线中所有顶点的位置。SetPosition设置线中某个顶点的位置。SetPositions设置线中所有顶点的位置。Simplify通过删除处于指定公差内的点来生成原始线的简化版本。
继承的成员
变量
gameObject此组件附加到的游戏对象。始终将组件附加到游戏对象。tag此游戏对象的标签。transform附加到此 GameObject 的 Transform。hideFlags该对象应该隐藏、随场景一起保存还是由用户修改?name对象的名称。allowOcclusionWhenDynamic控制是否应对该渲染器执行动态遮挡剔除。bounds渲染器的包围体积(只读)。enabled如果启用,则使渲染的 3D 对象可见。isPartOfStaticBatch该渲染器是否已与任何其他渲染器一起进行了静态批处理?isVisible该渲染器是否在任何摄像机中可见?(只读)lightmapIndex应用到该渲染器的烘焙光照贴图的索引。lightmapScaleOffset用于光照贴图的 UV 缩放和偏移。lightProbeProxyVolumeOverride如果设置,则渲染器将使用附加到源 GameObject 的 Light Probe Proxy Volume 组件。lightProbeUsage光照探针插值类型。localToWorldMatrix将点从本地空间转换到世界空间的矩阵(只读)。material返回指定给渲染器的第一个实例化 Material。materials返回该对象的所有实例化材质。motionVectorGenerationMode指定运动矢量渲染的模式。probeAnchor如果设置,渲染器将使用该变换的位置来查找光源或反射探针。realtimeLightmapIndex应用到该渲染器的实时光照贴图的索引。realtimeLightmapScaleOffset用于实时光照贴图的 UV 缩放和偏移。receiveShadows该对象是否接受阴影?reflectionProbeUsage是否应为该渲染器使用反射探针?rendererPriority此值按优先级对渲染器排序。首先渲染较小值,最后渲染较大值。renderingLayerMask确定该渲染器所在的渲染层。shadowCastingMode该对象是否投射阴影?sharedMaterial该对象的共享材质。sharedMaterials该对象的所有共享材质。sortingLayerID渲染器排序图层的唯一 ID。sortingLayerName渲染器排序图层的名称。sortingOrder排序图层中的渲染器顺序。worldToLocalMatrix将点从世界空间转换到本地空间的矩阵(只读)。
公共函数
BroadcastMessage调用此游戏对象或其任何子项中的每个 MonoBehaviour 上名为 methodName 的方法。CompareTag此游戏对象是否使用 tag 进行了标记?GetComponent如果游戏对象附加了类型为 type 的组件,则将其返回,否则返回 null。GetComponentInChildren使用深度首次搜索返回 GameObject 或其任何子项中类型为 type 的组件。GetComponentInParent返回 GameObject 或其任何父项中类型为 type 的组件。GetComponents返回 GameObject 中类型为 type 的所有组件。GetComponentsInChildren返回 GameObject 或其任何子项中类型为 type 的所有组件。GetComponentsInParent返回 GameObject 或其任何父项中类型为 type 的所有组件。SendMessage调用此游戏对象中的每个 MonoBehaviour 上名为 methodName 的方法。SendMessageUpwards调用此游戏对象中的每个 MonoBehaviour 上或此行为的每个父级上名为 methodName 的方法。GetInstanceID返回对象的实例 ID。ToString返回 GameObject 的名称。GetClosestReflectionProbes返回一个数组,其中包含带有权重的最近反射探针。权重显示探针对渲染器的影响程度,当反射探针之间发生混合时,也会用到该值。GetMaterials返回该对象的所有实例化材质。GetPropertyBlock获取每渲染器或每材质的属性块。GetSharedMaterials返回该对象的所有共享材质。HasPropertyBlock如果渲染器具有通过 SetPropertyBlock 附加的材质属性块,则返回 true。SetPropertyBlock允许您设置或清除每渲染器或每材质参数重写。
静态函数
Destroy删除 GameObject、组件或资源。DestroyImmediate立即销毁对象 /obj/。强烈建议您改用 Destroy。DontDestroyOnLoad在加载新的 Scene 时,请勿销毁 Object。FindObjectOfType返回第一个类型为 type 的已加载的激活对象。FindObjectsOfType返回所有类型为 type 的已加载的激活对象的列表。Instantiate克隆 original 对象并返回克隆对象。
运算符
bool该对象是否存在?operator !=比较两个对象是否引用不同的对象。operator ==比较两个对象引用,判断它们是否引用同一个对象。
消息
OnBecameInvisibleOnBecameInvisible 在对象对任何摄像机都不可见时调用。OnBecameVisibleOnBecameVisible 在对象变为对任意摄像机可见时调用。
屏幕坐标映射成世界坐标
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//Input.mousePosition
用LineRenderer绘制图形案例
1 | using System; |
- 本文作者: 梁俊可
- 本文链接: http://ljk3d.com/2021/10/19/unityNote/UnityBasic/使用Line Renderer组件绘制图形/
- 版权声明: 梁俊可工作室