unity开发之Line Renderer

Line Renderer 是一个有用的工具,可让您在游戏中绘制线条。 它可以用作游戏的函数或调试标记。 在这里,让我们创建一个程序,根据基本用法在 Line Renderer 上移动。
目录

如何使用 Line Renderer 和基础知识

首先,我们来基本学习如何使用它。

在场景中放置 Line Renderer

首先,调用 Line Renderer 以便在游戏中使用它的过程。

  • GameObjectMenuHierarchy 菜单。 ... 更多Effects>Line 中创建
  • 将 Component>Line Renderer 添加到空游戏对象

进行初始设置的最简单方法是通过 Effects。

关键组件属性

您应该了解一些属性。 如果您不知道可以在检查器中设置什么,您可能会感到困惑,因此我将向您介绍。

财产 效果等
场景工具 您可以增加用于在 Line Renderer 中编辑线条的工具 点数量。
位置 如果组成线的每个点的坐标可以确认为 2021 或更高,则可以通过拖放来交换顶点编号。
宽度 调整直线的粗细,使用 Animation Curve 控制 从尖端到末端的粗细
颜色 颜色
拐角顶点 直线接头的曲线可以平滑。 数字越大,越平滑,但网格数也会相应增加
End Cap Vertices(结束端顶点) 在起点和终点处可以 四舍五入的数字越多,它就会越平滑,但网格的数量会相应地增加
使用世界空间 如果选中,它将是一个绝对坐标系
材料 材料
Order In Layer 渲染上下文排序 层

如何添加顶点

我认为这可能是最简单的。

  • 在 Scene Tools 中选择 "+" 按钮
    • 您将处于顶点追加模式
    • 输入:鼠标位置
  • 单击场景中要添加顶点的位置。
  • 完成添加顶点
    • 再次按下 "+" 按钮可取消顶点添加模式


如何在 Input 中使用 Physics Raycast?

Physics Raycast 为凹凸不平的碰撞箱和其他内容创建顶点。 当您想要从地板到墙壁划线时,这很有用。

编辑您提出的观点

您创建的顶点也会在场景视图中进行编辑。 如果要进行精细的数值调整,请从 Positions (位置) 调整值。

  • 在 Scene Tools 中选择看起来像破损的串饺的图标
    • 进入顶点编辑模式(适合名称)
  • 选择要移动的顶点
    • 左键单击顶点上的黄点
    • 验证是否显示 MoveTool 箭头
  • 移动到要更改的位置
  • 顶点编辑模式退出
    • 再次选择串饺
    • 即使选择完全不同的游戏对象,它也将被取消

奖励:LineMover

从这里开始,我将介绍一些使用 Liner Renderer 的有用功能。 介绍通过跟踪您创建的线路来移动的程序

LineMover 脚本

在下面的脚本中,附加到 LineMover 的游戏对象沿 Line 移动。 逻辑是以 speed 设置的速度向下一个点移动。

  • 将其粘贴到要在行上移动的游戏对象
  • 设置要移动到 Inspector 的 Line Renderer
  • 当您玩 Unity 时,它会独立工作
    • 如果要调整速度,请增加或减少 speed 的值。
cs 复制代码
using UnityEngine;
using System;

public class LineMover : MonoBehaviour
{
    [SerializeField] private LineRenderer lineRenderer;
    [SerializeField] private float speed = 1f;

    private int currentIndex;
    public EventHandler OnEndReached;

    private void Start()
    {
        Initialize(0,speed,lineRenderer);
    }
    public void Initialize(int index, float speed, LineRenderer lineRenderer)
    {
        enabled = true;
        currentIndex = index;
        this.speed = speed;
        this.lineRenderer = lineRenderer;
        transform.position = this.lineRenderer.GetPosition(currentIndex);
    }

    public static (Vector3 targetPosition, bool isEnd) GetTargetPosition(ref int index, float moveSpeed, Vector3 currentPosition, LineRenderer lineRenderer)
    {
        int nextIndex = index + 1;

        if (lineRenderer.positionCount <= nextIndex)
        {
            return (lineRenderer.GetPosition(index)+ lineRenderer.transform.position, true);
        }
        var nextPosition = lineRenderer.GetPosition(nextIndex) + lineRenderer.transform.position;

        float distance = Vector3.Distance(currentPosition, nextPosition);

        if (distance < moveSpeed)
        {
            index += 1;
            return GetTargetPosition(ref index, moveSpeed - distance, nextPosition, lineRenderer);
        }
        else
        {
            Vector3 direction = (nextPosition - currentPosition).normalized;
            return (currentPosition + direction * moveSpeed, false);
        }
    }
    private void Update()
    {
        var result = GetTargetPosition(
            ref currentIndex,
            speed * Time.deltaTime,
            transform.position,
            lineRenderer);
        transform.position = result.targetPosition;
        if (result.isEnd)
        {
            OnEndReached?.Invoke(this, EventArgs.Empty);
            enabled = false;
        }
    }
}

如果要接收 move completed,可以通过接收 OnEndReached 的 EventHandler 来检查它该程序可能需要根据应用程序进行更改。

由于上述程序只更新 transform.position,所以如果想结合物理行为,需要使用 Rigidbody MovePosition 什么的。 顺便说一句,同样的东西也被用来移动寿司游戏的盘子。

本文章来源Line Renderer 的基本使用方法和沿线移动的过程 [Unity] | 如何制作该游戏网页版

相关推荐
WarPigs7 小时前
Unity性能优化笔记
笔记·unity·游戏引擎
T.D.C14 小时前
【业务框架】3C-相机-Cinemachine
unity
Clank的游戏栈1 天前
Unity基于GraphView的可视化关卡编辑器开发指南
unity·编辑器·游戏引擎
海尔辛1 天前
Unity UI 性能优化--Sprite 篇
ui·unity·性能优化
XR-AI-JK2 天前
Unity VR/MR开发-VR设备与适用场景分析
unity·vr·mr
ChiLi_Lin2 天前
Unity异常上报飞书工具
unity·游戏引擎·飞书
地狱为王2 天前
基于VLC的Unity视频播放器(四)
unity·游戏引擎·音视频
2 天前
Unity与Excel表格交互热更方案
unity·游戏引擎·excel
装大炮的自行车3 天前
【Unity】R3 CSharp 响应式编程 - 使用篇(集合)(三)
windows·unity·游戏引擎
阿松爱学习3 天前
【Unity开发】控制手机移动端的震动
unity·游戏引擎·unity开发