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] | 如何制作该游戏网页版

相关推荐
red_redemption36 分钟前
自由学习记录(23)
学习·unity·lua·ab包
向宇it18 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
Heaphaestus,RC20 小时前
【Unity3D】获取 GameObject 的完整层级结构
unity·c#
芋芋qwq20 小时前
Unity UI射线检测 道具拖拽
ui·unity·游戏引擎
tealcwu20 小时前
【Unity服务】关于Unity LevelPlay的基本情况
unity·游戏引擎
惜.己1 天前
Jmeter中的断言(二)
测试工具·jmeter·1024程序员节
大眼睛姑娘1 天前
Unity3d场景童话梦幻卡通Q版城镇建筑植物山石3D模型游戏美术素材
unity·游戏美术
鹿野素材屋1 天前
Unity Dots下的动画合批工具:GPU ECS Animation Baker
unity·游戏引擎
西电研梦1 天前
考研倒计时30天丨和西电一起向前!再向前!
人工智能·考研·1024程序员节·西电·西安电子科技大学
惜.己1 天前
Jmeter中的断言(四)
测试工具·jmeter·1024程序员节