当前位置: 移动技术网 > IT编程>开发语言>C/C++ > 用 Unity 的 LineRenderer 实现一个画直线组件

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

2020年08月10日  | 移动技术网IT编程  | 我要评论

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

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

  

  这里要注意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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网