Unity画一条线,使用LineRenderer

35 篇文章 1 订阅
public class LineCreater : BaseCreater
{
    private bool isDrawing;//是否在画线
    private LineRenderer wallLine;
    private Vector3 StartPosition, EndPosition;

    private float wallWidth = 0.5f;
    private float wallHeight = 3f;
    void Start()
    {

    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            if (EventSystem.current != null && EventSystem.current.IsPointerOverGameObject())
            {
                //判断是否点击UI
                return;
            }

            var inputPosition = GetMousePosition();
            StartPosition = inputPosition;
            CreateLine(StartPosition);
        }

        if (Input.GetMouseButtonUp(0))
        {
            EndPosition = GetMousePosition();

            if ((EndPosition - StartPosition).sqrMagnitude > 1 * 1)
            {
                DrawLineFinished();
            }
            else
            {
                Destroy(wallLine.gameObject);
            }

            isDrawing = false;
        }

        if (isDrawing)
        {
            wallLine.SetPosition(1, GetMousePosition());
        }
    }

    /// <summary>
    /// 获取鼠标点击的坐标
    /// </summary>
    /// <returns></returns>
    private Vector3 GetMousePosition()
    {
        var ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        RaycastHit hit;
        bool isCollider = Physics.Raycast(ray, out hit);
        if (isCollider)
        {
            return hit.point - new Vector3(0, 0, 0.01f);
        }
        return Vector3.zero;
    }

    /// <summary>
    /// 画线完成
    /// </summary>
    private void DrawLineFinished()
    {
        GetVertices();

        StartPosition = Vector3.zero;
        EndPosition = Vector3.zero;
    }

    /// <summary>
    /// 创建线
    /// </summary>
    void CreateLine(Vector3 start)
    {
        GameObject wall = new GameObject("wall");
        wall.transform.SetParent(transform);
        wallLine = wall.AddComponent<LineRenderer>();
        wallLine.startWidth = 0.05f;
        wallLine.endWidth = 0.05f;
        wallLine.SetPosition(0, start);
        isDrawing = true;
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Unity使用LineRenderer组件可以在游戏中绘制线条。使用方法如下: 1. 在场景中添加一个空物体 2. 在该空物体上添加LineRenderer组件 3. 设置LineRenderer的属性,如线条颜色、宽度等 4. 通过代码设置LineRenderer的顶点坐标,从而绘制线条 例如: ```c# using UnityEngine; public class LineDrawer : MonoBehaviour { private LineRenderer lineRenderer; private Vector3 startPos; private Vector3 endPos; void Start() { lineRenderer = GetComponent<LineRenderer>(); startPos = new Vector3(-10, 0, 0); endPos = new Vector3(10, 0, 0); lineRenderer.SetPosition(0, startPos); lineRenderer.SetPosition(1, endPos); } } ``` 这样就可以在场景中绘制一条从(-10,0,0)到(10,0,0)的线段了。 ### 回答2: UnityLinerenderer组件是渲染直线的基础组件。通过该组件,我们可以在Unity游戏引擎中绘制直线。该组件用于绘制连续线,并且可以使用纹理对线进行着色,非常适合在游戏中绘制雷达、轨迹、手绘图等。 使用Linerenderer组件需要以下几个步骤: 1. 在Unity编辑器中创建一个GameObject,右键选择“3D Object” -> “Line” ,然后命名新创建的游戏对象并保存。被创建物体上会自带LineRenderer组件。 2. 选择LineRenderer组件,在Inspector面板中我们可以设置线的属性,比如线的宽度、颜色、材质等。 3. 在这里我们可以为这条直线定义顶点,这些顶点是用来绘制线的。我们可以在代码中编写自定义算法,来决定每个点的坐标位置,也可以手动在Inspector面板中设置每个点的坐标来自定义线。 4. 程序员可以在代码中使用Linerenderer组件来绘制计算出的坐标的直线。例如,根据用户输入的坐标绘制路径路线。这些线将在场景中动态生成。 需要注意的是,LineRenderer实现在镜头非常近的情况下有些问题, 因为线必须放在屏幕空间中。为了避免这个问题,我们将整个场景缩小,用远离相机的高分辨率渲染纹理来渲染线效果。 总之,利用Linerenderer可以快速绘制相对简单的直线,不需要使用LineRenderer的一堆组件。为了增强游戏的视觉效果,可以使用纹理和双边(bezier)曲线实现更加丰富的线条绘制。 ### 回答3: UnityLineRenderer是一种绘制直线、曲线等图形的组件。使用LineRenderer可以实现游戏中很多效果,例如轮廓、绘制路径等。在这里,我将介绍UnityLineRenderer使用。 首先,在Unity中创建LineRenderer组件很简单。只需要将游戏对象上添加一个LineRenderer组件即可。添加完毕后,默认情况下该组件会绘制一条短的直线。我们需要进行一些设置来使其绘制出我们需要的图形。 可以通过LineRenderer组件上的Inspector面板进行设置。这里可以设置LineRenderer的材质、颜色、宽度等参数。其中,关键的是设置Positions属性中的点的坐标,这一步操作即可实现线功能。例如: ```C# LineRenderer lineRenderer = GetComponent<LineRenderer>(); lineRenderer.positionCount = 2; lineRenderer.SetPosition(0, new Vector3(0, 0, 0)); lineRenderer.SetPosition(1, new Vector3(1, 1, 1)); ``` 上述代码可以在游戏对象上绘制一条从原点(0, 0, 0)到(1, 1, 1)的直线LineRenderer还有一些其他的设置,例如通过设置useWorldSpace属性可以使Points使用世界坐标而非局部坐标进行绘制;设置起点和终点颜色,可以实现颜色渐变效果等等。 另外需要注意的是,LineRenderer组件需要确保被绘制的对象有一个渲染器组件,例如MeshRenderer或SpriteRenderer,否则线条将不可见。 总的来说,UnityLineRenderer是一个十分实用的组件,可以很好的实现线的功能,适用于制作各类游戏效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

呼呼突突

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

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

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

打赏作者

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

抵扣说明:

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

余额充值