Unity引擎学习笔记之【线条、拖尾操作】

线条、拖尾 Line&Trail

一、LIne Renderer组件

1、基本属性

  • 场景工具 包含基本的调整点和添加点

  • 循环:选择是否连接线段首尾

  • 位置:设置线段的位置,而Transform组件中并不是真正的位置

    • 大小:设置关键点数量
    • index X Y Z :设置线段上每一个关键点的位置

  • 宽度:设置整根线条的粗细,在曲线上双击可以添加锚点

  • 颜色:调整线条的颜色和透明度

  • 角顶点:设置拐角的顶点细分数,角顶点数越多过度越圆滑

  • 末端顶点 更改线段两端圆滑度

  • Materials 设置线段的材质纹理

2、自定义脚本

  • 获取LIne Renderer组件
    LineRenderer lineRenderer= GetComponent<LineRenderer>();
  • 设置线段属性

    • 设置线段锚点数
        lineRenderer.positionCount = 3;
    
    • 设置每个点的位置
    lineRenderer.positionCount = 3;
    lineRenderer.SetPosition(0, Vector3.zero);
    lineRenderer.SetPosition(0, Vector3.up);
    lineRenderer.SetPosition(0, Vector3.down);
    

    • 设置点数组的位置
    public void SetPositions (Vector3[] positions);
    public void SetPositions (NativeArray<Vector3> positions);
    public void SetPositions (NativeSlice<Vector3> positions);
    

二、Trail Renderer组件

1.基本属性

  • 宽度:设置拖尾线条的宽度

  • 时间:生成的拖尾留存的生命周期

  • 最小顶点距离:在移动多少距离范围内不生成拖尾

  • 自动销毁:拖尾动效完成后销毁本物体

  • 正在发射:拖尾正在生效中

  • 颜色:设置拖尾的颜色

2.自定义脚本

    
public class TrailRendererTest : MonoBehaviour
{
    public GameObject trailPrefab;  // 预制体用于创建轨迹效果(例如粒子系统)

    private GameObject currentTrail;  // 当前的轨迹对象
    private bool isTrailing;  // 是否正在绘制轨迹

    // 在每一帧更新轨迹的位置
    private void Update()
    {
        if (isTrailing)
        {
            UpdateTrailPosition();
        }
    }

    // 启动轨迹绘制
    public void StartTrailing()
    {
        if (!isTrailing)
        {
            CreateTrail();
            isTrailing = true;
        }
    }

    // 停止轨迹绘制
    public void StopTrailing()
    {
        if (isTrailing)
        {
            DestroyTrail();
            isTrailing = false;
        }
    }

    // 创建轨迹效果
    private void CreateTrail()
    {
        currentTrail = Instantiate(trailPrefab, transform.position, Quaternion.identity);
        currentTrail.transform.SetParent(transform);  // 将轨迹对象设置为当前对象的子对象
    }

    // 销毁轨迹对象
    private void DestroyTrail()
    {
        Destroy(currentTrail);
    }

    // 更新轨迹位置
    private void UpdateTrailPosition()
    {
        if (currentTrail != null)
        {
            currentTrail.transform.position = transform.position;
        }
    }
}

附1:LIne Renderer参数解释

变量



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控制是否应对该渲染器执行动态遮挡剔除。
boundsThe bounding box of the renderer in world space.
enabled如果启用,则使渲染的 3D 对象可见。
forceRenderingOff允许关闭特定组件的渲染。
isPartOfStaticBatchIndicates whether the renderer is part of a static batch with other renderers.
isVisible该渲染器是否在任何摄像机中可见?(只读)
lightmapIndex应用到该渲染器的烘焙光照贴图的索引。
lightmapScaleOffset用于光照贴图的 UV 缩放和偏移。
lightProbeProxyVolumeOverride如果设置,则渲染器将使用附加到源 GameObject 的 Light Probe Proxy Volume 组件。
lightProbeUsage光照探针插值类型。
localBoundsThe bounding box of the renderer in local space.
localToWorldMatrix将点从本地空间转换到世界空间的矩阵(只读)。
material返回指定给渲染器的第一个实例化 Material。
materials返回该对象的所有实例化材质。
motionVectorGenerationMode指定运动矢量渲染的模式。
probeAnchor如果设置,渲染器将使用该变换的位置来查找光源或反射探针。
rayTracingMode描述如何更新该渲染器来进行射线追踪。
realtimeLightmapIndexThe index of the real-time lightmap applied to this renderer.
realtimeLightmapScaleOffsetThe UV scale & offset used for a real-time lightmap.
receiveShadows该对象是否接受阴影?
reflectionProbeUsage是否应为该渲染器使用反射探针?
rendererPriority此值按优先级对渲染器排序。首先渲染较小值,最后渲染较大值。
renderingLayerMask确定该渲染器所在的渲染层。
shadowCastingMode该对象是否投射阴影?
sharedMaterial该对象的共享材质。
sharedMaterials该对象的所有共享材质。
sortingLayerID渲染器排序图层的唯一 ID。
sortingLayerName渲染器排序图层的名称。
sortingOrder排序图层中的渲染器顺序。
staticShadowCasterIs this renderer a static shadow caster?
worldToLocalMatrix将点从世界空间转换到本地空间的矩阵(只读)。
公共函数


BroadcastMessage调用此游戏对象或其任何子项中的每个 MonoBehaviour 上名为 methodName 的方法。
CompareTagChecks the GameObject’s tag against the defined tag.
GetComponentReturns the component of type if the GameObject has one attached.
GetComponentInChildrenReturns the Component of type in the GameObject or any of its children using depth first search.
GetComponentInParentReturns the Component of type in the GameObject or any of its parents.
GetComponents返回 GameObject 中类型为 type 的所有组件。
GetComponentsInChildrenReturns all components of Type type in the GameObject or any of its children using depth first search. Works recursively.
GetComponentsInParent返回 GameObject 或其任何父项中类型为 type 的所有组件。
SendMessage调用此游戏对象中的每个 MonoBehaviour 上名为 methodName 的方法。
SendMessageUpwards调用此游戏对象中的每个 MonoBehaviour 上或此行为的每个父级上名为 methodName 的方法。
TryGetComponent获取指定类型的组件(如果存在)。
GetInstanceIDGets the instance ID of the object.
ToString返回对象的名称。
GetClosestReflectionProbes返回一个数组,其中包含带有权重的最近反射探针。权重显示探针对渲染器的影响程度,当反射探针之间发生混合时,也会用到该值。
GetMaterials返回该对象的所有实例化材质。
GetPropertyBlock获取每渲染器或每材质的属性块。
GetSharedMaterials返回该对象的所有共享材质。
HasPropertyBlock如果渲染器具有通过 SetPropertyBlock 附加的材质属性块,则返回 true。
ResetBoundsReset custom world space bounds.
ResetLocalBoundsReset custom local space bounds.
SetPropertyBlock允许您设置或清除每渲染器或每材质参数重写。
静态函数


Destroy移除 GameObject、组件或资源。
DestroyImmediate立即销毁对象 /obj/。强烈建议您改用 Destroy。
DontDestroyOnLoad在加载新的 Scene 时,请勿销毁 Object。
FindObjectOfType返回第一个类型为 type 的已加载的激活对象。
FindObjectsOfTypeGets a list of all loaded objects of Type type.
Instantiate克隆 original 对象并返回克隆对象。
运算符


bool该对象是否存在?
operator !=比较两个对象是否引用不同的对象。
operator ==比较两个对象引用,判断它们是否引用同一个对象。
消息


OnBecameInvisibleOnBecameInvisible 在对象对任何摄像机都不可见时调用。
OnBecameVisibleOnBecameVisible 在对象变为对任意摄像机可见时调用。

附2:Trail Renderer参数解释

变量



alignment选择轨迹是朝向摄像机还是变换组件的方向。
autodestruct此轨迹渲染器的 GameObject 是否自动销毁?
colorGradient设置颜色渐变,用于描述轨迹在其长度上各个点处的颜色。
emitting创建 GameObject 移动时的轨迹。
endColor设置轨迹终点处的颜色。
endWidth轨迹终点处的轨迹宽度。
generateLightingData配置轨迹以生成法线和切线。借助此数据,场景光照可以通过法线贴图和 Unity 标准着色器或是您自己的定制着色器来影响轨迹。
minVertexDistance设置轨迹在新顶点添加到其中之前可以行进的最小距离。
numCapVertices将它设置为大于 0 的值,可在轨迹的每端上获得圆角。
numCornerVertices将它设置为大于 0 的值,可在轨迹的每个细分段之间获得圆角。
positionCount获取轨迹中的线细分段数。
shadowBias应用阴影偏差以防止自我阴影瑕疵。指定的值是每一段的轨迹宽度比例。
startColor设置轨迹起点处的颜色。
startWidth生成点处的轨迹宽度。
textureMode选择轨迹纹理的 U 坐标是进行平铺还是拉伸。
time轨迹淡出需要的时间。
widthCurve设置曲线,用于描述轨迹在其长度上各个点处的宽度。
widthMultiplier设置一个整体乘数,它应用于 TrailRenderer.widthCurve 以得到轨迹的最终宽度。
公共函数


AddPosition向轨迹添加位置。
AddPositions向轨迹添加位置数组。
BakeMesh创建 TrailRenderer 的快照并将其存储在 mesh 中。
Clear删除 TrailRenderer 中的所有点。 对于从新位置重新开始轨迹非常有用。
GetPosition获取轨迹中某个顶点的位置。
GetPositions获取轨迹中所有顶点的位置。
SetPosition设置轨迹中某个顶点的位置。
SetPositions设置轨迹中所有顶点的位置。

继承的成员

变量


gameObject此组件附加到的游戏对象。始终将组件附加到游戏对象。
tag此游戏对象的标签。
transform附加到此 GameObject 的 Transform。
hideFlags该对象应该隐藏、随场景一起保存还是由用户修改?
name对象的名称。
allowOcclusionWhenDynamic控制是否应对该渲染器执行动态遮挡剔除。
boundsThe bounding box of the renderer in world space.
enabled如果启用,则使渲染的 3D 对象可见。
forceRenderingOff允许关闭特定组件的渲染。
isPartOfStaticBatchIndicates whether the renderer is part of a static batch with other renderers.
isVisible该渲染器是否在任何摄像机中可见?(只读)
lightmapIndex应用到该渲染器的烘焙光照贴图的索引。
lightmapScaleOffset用于光照贴图的 UV 缩放和偏移。
lightProbeProxyVolumeOverride如果设置,则渲染器将使用附加到源 GameObject 的 Light Probe Proxy Volume 组件。
lightProbeUsage光照探针插值类型。
localBoundsThe bounding box of the renderer in local space.
localToWorldMatrix将点从本地空间转换到世界空间的矩阵(只读)。
material返回指定给渲染器的第一个实例化 Material。
materials返回该对象的所有实例化材质。
motionVectorGenerationMode指定运动矢量渲染的模式。
probeAnchor如果设置,渲染器将使用该变换的位置来查找光源或反射探针。
rayTracingMode描述如何更新该渲染器来进行射线追踪。
realtimeLightmapIndexThe index of the real-time lightmap applied to this renderer.
realtimeLightmapScaleOffsetThe UV scale & offset used for a real-time lightmap.
receiveShadows该对象是否接受阴影?
reflectionProbeUsage是否应为该渲染器使用反射探针?
rendererPriority此值按优先级对渲染器排序。首先渲染较小值,最后渲染较大值。
renderingLayerMask确定该渲染器所在的渲染层。
shadowCastingMode该对象是否投射阴影?
sharedMaterial该对象的共享材质。
sharedMaterials该对象的所有共享材质。
sortingLayerID渲染器排序图层的唯一 ID。
sortingLayerName渲染器排序图层的名称。
sortingOrder排序图层中的渲染器顺序。
staticShadowCasterIs this renderer a static shadow caster?
worldToLocalMatrix将点从世界空间转换到本地空间的矩阵(只读)。
公共函数


BroadcastMessage调用此游戏对象或其任何子项中的每个 MonoBehaviour 上名为 methodName 的方法。
CompareTagChecks the GameObject’s tag against the defined tag.
GetComponentReturns the component of type if the GameObject has one attached.
GetComponentInChildrenReturns the Component of type in the GameObject or any of its children using depth first search.
GetComponentInParentReturns the Component of type in the GameObject or any of its parents.
GetComponents返回 GameObject 中类型为 type 的所有组件。
GetComponentsInChildrenReturns all components of Type type in the GameObject or any of its children using depth first search. Works recursively.
GetComponentsInParent返回 GameObject 或其任何父项中类型为 type 的所有组件。
SendMessage调用此游戏对象中的每个 MonoBehaviour 上名为 methodName 的方法。
SendMessageUpwards调用此游戏对象中的每个 MonoBehaviour 上或此行为的每个父级上名为 methodName 的方法。
TryGetComponent获取指定类型的组件(如果存在)。
GetInstanceIDGets the instance ID of the object.
ToString返回对象的名称。
GetClosestReflectionProbes返回一个数组,其中包含带有权重的最近反射探针。权重显示探针对渲染器的影响程度,当反射探针之间发生混合时,也会用到该值。
GetMaterials返回该对象的所有实例化材质。
GetPropertyBlock获取每渲染器或每材质的属性块。
GetSharedMaterials返回该对象的所有共享材质。
HasPropertyBlock如果渲染器具有通过 SetPropertyBlock 附加的材质属性块,则返回 true。
ResetBoundsReset custom world space bounds.
ResetLocalBoundsReset custom local space bounds.
SetPropertyBlock允许您设置或清除每渲染器或每材质参数重写。
静态函数


Destroy移除 GameObject、组件或资源。
DestroyImmediate立即销毁对象 /obj/。强烈建议您改用 Destroy。
DontDestroyOnLoad在加载新的 Scene 时,请勿销毁 Object。
FindObjectOfType返回第一个类型为 type 的已加载的激活对象。
FindObjectsOfTypeGets a list of all loaded objects of Type type.
Instantiate克隆 original 对象并返回克隆对象。
运算符


bool该对象是否存在?
operator !=比较两个对象是否引用不同的对象。
operator ==比较两个对象引用,判断它们是否引用同一个对象。
消息


OnBecameInvisibleOnBecameInvisible 在对象对任何摄像机都不可见时调用。
OnBecameVisibleOnBecameVisible 在对象变为对任意摄像机可见时调用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老师好我差点叫何同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值