Line Renderer 是一个有用的工具,可让您在游戏中绘制线条。 它可以用作游戏的函数或调试标记。 在这里,让我们创建一个程序,根据基本用法在 Line Renderer 上移动。
- 如何使用 Line Renderer 和基础知识
- 在场景中放置 Line Renderer
- 关键组件属性
- 如何添加顶点
- 编辑您提出的观点
- 奖励:LineMover
- LineMover 脚本
- 该程序可能需要根据应用程序进行更改。
如何使用 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 的值。
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] | 如何制作该游戏网页版