LineRenderer란?
두 지점간의 라인을 그려줄때 사용하는 함수로 아래 처럼 그려 줄 수 있습니다.
약간 스플라인 느낌으로 좌표상의 길을 깔아 줄 수 있게 해주는 컴포넌트입니다.
컴포넌트를 보게 되면 많은 설정값들이 있는데 각각 살펴 봅시다.
먼저 윗부분은 라인의 모양등을 조절해주는 곳으로 + 버튼을 누른후 아래 그래프에서 더블클릭으로 변경 가능합니다.
그다음 부분 부터는
color : 길이에 따라 선의 색상을 제어하는 그라데이션을 정의합니다.
corner vertices : 모서리를 둥글게 만들기 가능
end cap verices : 끝 테두리 조절
alignment : 선이 향하는 방향 조정 >> view 카메라가 바라보는 방향!
texture mode : 텍스처 모드
shadow bias : 그림자 이팩트 조절
generate lighting data : 조명 데이터
use world space : 월드공간 좌표인지
Materials : 선의 머터리얼
lighting : 조명 세팅
probes : 빛 반사 정도 설정
additional settings : 추가 설정 >> 모션 벡터 설정, 레이어 정렬, 순서 설정, 오클루젼 설정
등등.....
너무많네요.... 하지만 저희가 사용할 부분은 매우 간단합니다.
이제 구현 시작!
컴포넌트에서 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 |
댓글