Unity LineRenderer를 이용한 그리기
- 프로그래밍/유니티
- 2023. 4. 15.
250x250
유니티 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;
}
}
주요 코드 설명
인스펙터 창에서 이런식으로 원하는 색의 메테리얼을 할당해 사용했습니다.
이런식으로 작동합니다.