Unity LineRenderer를 이용한 그리기

유니티 LineRenderer를 이용한 그리기.

안녕하세요.

Unity엔진에서 라인을 그리는 방법에는 여러가지가 있습니다.

오늘 작성하는 이 글 역시 그러한 방법 중 하나이며, 이보다 좋은 코드는 많이 있습니다.

  • 코드에 대한 설명.
  • LineRenderer를 이용한 선 그리기 코드.
  • 실행결과.

코드에 대한 설명.

 이 글의 코드는 Unity에서 라인을 그리는 방법은 대충 이런식으로 된다 라는 것을 보여주기 위한 코드입니다.

처음 만들때 마우스로 그리는 것은 고려하지 않았고, 수정하기도 귀찮아서 필요없는 부분을 제거하고 작동만 하도록 코드를 수정했습니다.

 

StartDraw() =함수에서 선을 그리기 위한 초기화 작업을 수행하는 함수입니다.

LineDrawing()=함수에서 현재 마우스 위치와 마지막으로 그려진 위치 사이의 거리가 distanceThreshold보다 크다면 선을 업데이트 하도록 하는 함수입니다.

UpdateLine()= 선의 업데이트를 수행하는 함수입니다.

StopDrawing() = 선 그리기를 멈추는 함수입니다.

LineRenderer를 이용한 선 그리기 코드.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DrawLine : MonoBehaviour
{
    private Transform penPos;
    public Material pencolor;
    public float width = 0.01f;

    private List<Vector3> LinePos = new List<Vector3>();
    private float distanceThreshold = 0.05f;
    private bool On = true;
    private bool isDrawing = false;
    private LineRenderer lineRenderer;

    private void Start()
    {
        penPos = this.GetComponent<Transform>();
    }
    private void Update()
    {
        if (On)
        {
            if (!isDrawing)
                StartDraw();
            else if (isDrawing)
                LineDrawing();
        }
    }
    private void StartDraw()
    {
        isDrawing = true;
        GameObject lineobject= new GameObject("Line");
        lineRenderer = lineobject.AddComponent<LineRenderer>();
        UpdateLine();
    }
    private void UpdateLine()
    {
        //line pos
        LinePos.Add(penPos.position);
        lineRenderer.positionCount = LinePos.Count;
        lineRenderer.SetPositions(LinePos.ToArray());
        //size/color
        lineRenderer.startWidth = width;
        lineRenderer.material = pencolor;
    }
    private void LineDrawing()
    {
        if (!lineRenderer || LinePos.Count == 0)
            return;
        Vector3 prev = LinePos[LinePos.Count - 1];
        //distanceThreshold만큼의 거리가 벌어지면 updateLine실행.
        if (Vector3.Distance(prev, penPos.position) > distanceThreshold)
            UpdateLine();
    }
    void StopDrawing()
    {
        isDrawing = false;
        LinePos.Clear();
        lineRenderer = null;
    }
}

주요 코드 설명

인스펙터 창에서 이런식으로 원하는 색의 메테리얼을 할당해 사용했습니다.

이런식으로 작동합니다.

Designed by JB FACTORY