LineRenderer란?
두 지점간의 라인을 그려줄때 사용하는 함수로 아래 처럼 그려 줄 수 있습니다.
약간 스플라인 느낌으로 좌표상의 길을 깔아 줄 수 있게 해주는 컴포넌트입니다.
컴포넌트를 보게 되면 많은 설정값들이 있는데 각각 살펴 봅시다.
먼저 윗부분은 라인의 모양등을 조절해주는 곳으로 + 버튼을 누른후 아래 그래프에서 더블클릭으로 변경 가능합니다.
그다음 부분 부터는
color : 길이에 따라 선의 색상을 제어하는 그라데이션을 정의합니다.
corner vertices : 모서리를 둥글게 만들기 가능
end cap verices : 끝 테두리 조절
alignment : 선이 향하는 방향 조정 >> view 카메라가 바라보는 방향!
texture mode : 텍스처 모드
shadow bias : 그림자 이팩트 조절
generate lighting data : 조명 데이터
use world space : 월드공간 좌표인지
Materials : 선의 머터리얼
lighting : 조명 세팅
probes : 빛 반사 정도 설정
additional settings : 추가 설정 >> 모션 벡터 설정, 레이어 정렬, 순서 설정, 오클루젼 설정
등등.....
Unity - Manual: Line Renderer component
Lines, trails, and billboards Line Renderer component Switch to Scripting The Line Renderer component takes an array of two or more points in 3D space, and draws a straight line between each one. You can use a Line Renderer to draw anything from a simple s
docs.unity3d.com
너무많네요.... 하지만 저희가 사용할 부분은 매우 간단합니다.
이제 구현 시작!
컴포넌트에서 Materials 부분만 선에 사용할 색으로 변경해줍시다.
그다음
코드는 단순하게 컴포넌트를 받아와서
시작 너비와 끝너비를 지정해주고
시작 지점과 끝 지점, 2곳을 SetPosition으로 선언해주면 끝!
temp = gameobject.GetComponent<LineRenderer>();
temp.startWidth = .5f;
temp.endWidth = .5f;
....
temp.SetPosition(0, Gameobj1.GetComponent<Transform>().position);
temp.SetPosition(1, Gameobj2.GetComponent<Transform>().position);
자 이제 여러개의 위치에다 라인을 그려주고 싶으면 어떻게 해야할까요....
먼가 코드만 보면 아래처럼 구성하면 될것 같습니다
temp.SetPosition(0, Gameobj1.GetComponent<Transform>().position);
temp.SetPosition(1, Gameobj2.GetComponent<Transform>().position);
temp.SetPosition(2, Gameobj2.GetComponent<Transform>().position);
temp.SetPosition(3, Gameobj3.GetComponent<Transform>().position);
하지만 안되더라구요....
여기서 하나의 변수값을 변경해야 가능하다는것을 알게되었습니다. (중요!)
lineRenderer.positionCount = (점의 갯수);
이어지는 점의 갯수를 선택하면 아래처럼 4개의 점이 연결되는 것을 볼수있습니다.
여기서 리스트를 활용해 본다면 아래처럼 구성하는것도 가능했습니다.
List<Vector3> vectorlist=new List<Vector3>();
for(int i = 0; i < list.Length; i++)
{
vectorlist.Add(list[i].transform.position);
}
lineRenderer.positionCount = vectorlist.Count;
lineRenderer.SetPositions(vectorlist.ToArray()); // !! 배열로 받아들이는게 가능!
하지만 setPosition 이란 선이 가능 길을 그려주는것으로
한 점에서 4방향으로 그려지게끔 구성할 수 없었습니다.
그래서! 약간 비효율적이지만 선을 그리고 다시 중앙으로 돌아오는 방식으로 그려 보았습니다. (아래 그림처럼)
최종 코드!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
public GameObject[] list=new GameObject[4];
LineRenderer lineRenderer;
// Start is called before the first frame update
void Start()
{
lineRenderer=gameObject.GetComponent<LineRenderer>();
}
// Update is called once per frame
void Update()
{
List<Vector3> vectorlist=new List<Vector3>();
for(int i = 0; i < list.Length; i++)
{
vectorlist.Add(gameObject.transform.position);
vectorlist.Add(list[i].transform.position);
}
lineRenderer.positionCount = vectorlist.Count;
lineRenderer.SetPositions(vectorlist.ToArray());
}
}
제 계획대로 구현 가능했습니다! 굳굳 (비효율..)
틀린점이 있다면 댓 달아주세요!

'유니티 최고 > 유니티 구현' 카테고리의 다른 글
유니티(Unity) Grid지도 만들어 길찾기 구현하기(2)- 다익스트라(Dijkstra) 알고리즘 구현 (0) | 2023.05.18 |
---|---|
유니티(Unity) Grid지도 만들어 길찾기 구현하기(1) (2) | 2023.05.17 |
유니티(Unity) 유니티에서 ChatGpt 봇 만들어보기 (0) | 2023.05.04 |
유니티(Unity) MapBox를 이용한 지도 구축(2)(Map sty) (1) | 2023.04.12 |
유니티(Unity) 웹뷰 사용해보기 (2가지)-Gree &Game Package Manager (1) | 2023.04.10 |
댓글