欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

用 Unity 的 LineRenderer 实现一个画直线组件

程序员文章站 2022-07-03 17:07:01
最近需要在工程里实现一个*画直线的功能,上网查来查去,发现用 Unity 画线有各式各样的方案,最后锚定了这个LineRenderer,打算用它来做一个画线 Prefab,另外加载一个自己写的脚本,方便未来*定制。 创建一个 Empty 节点,我给它起名叫 DrawLine2D 。 这里要注意Materials的材质要选Sprites-Default 。 接下来给这个节点挂一个脚本,我起名叫DrawLine2DController 。代码如下:using Sys......

  最近需要在工程里实现一个*画直线的功能,上网查来查去,发现用 Unity 画线有各式各样的方案,最后锚定了这个LineRenderer,打算用它来做一个画线 Prefab,另外加载一个自己写的脚本,方便未来*定制。

  创建一个 Empty 节点,我给它起名叫 DrawLine2D 。

  用 Unity 的 LineRenderer 实现一个画直线组件

  这里要注意Materials的材质要选Sprites-Default 。

  接下来给这个节点挂一个脚本,我起名叫 DrawLine2DController 。

代码如下:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DrawLine2DController : MonoBehaviour {
    private LineRenderer lineRenderer;
    public Color startColor;
    public Color endColor;

    public float startWidth;
    public float endWidth;
    public Vector3 startPosition;
    public Vector3 endPosition;

    void Start() {
        lineRenderer = GetComponent<LineRenderer>();
        lineRenderer.startColor = startColor;
        lineRenderer.endColor = endColor;
        lineRenderer.startWidth = startWidth;
        lineRenderer.endWidth = endWidth;

        int lengthY = (int)Math.Abs(endPosition.y-startPosition.y);
        int lengthX = (int)Math.Abs(endPosition.x-startPosition.x);
        float zPosition = Math.Max(startPosition.z, endPosition.z);
        Vector3 bottomPosition = startPosition.y < endPosition.y ? startPosition : endPosition;
        Vector3 leftPosition = startPosition.x < endPosition.x ? startPosition : endPosition;
        
        if (lengthY > lengthX && lengthY >= 1f) {
            lineRenderer.positionCount = lengthY;
            for (int i = 0; i < lengthY; ++i) {
                float xOffset = i * lengthX/lengthY;
                lineRenderer.SetPosition(i, new Vector3(leftPosition.x+xOffset, bottomPosition.y+(float)i, zPosition));
            }
        } else if (lengthX >= 1f) {
            lineRenderer.positionCount = lengthX;
            for (int i = 0; i < lengthX; ++i) {
                float yOffset = i * lengthX/lengthY;
                lineRenderer.SetPosition(i, new Vector3(leftPosition.x+(float)i, bottomPosition.y+yOffset, zPosition));
            }
        }
    }
}

这段代码实现了基本按像素点(1为单元,其实可以自己调节精度)的画直线绘制操作。

挂载后把这个对象以Prefab形式保存了,暴露的脚本public属性可以用来设置画线用的颜色和粗细度。以后还可以扩展画曲线。

 

本文地址:https://blog.csdn.net/madaxin/article/details/107865867

相关标签: unity