[Line Renderer]
[Line Renderer]
Line Renderer 컴포넌트는 3D 공간에서 두 개 이상의 지점 배열을 가져와 각각의 점 사이에 직선을 그리는 컴포넌트이다.
해당 라인 렌더러를 사용하여 움직이는 물체 사이를 이으려고 한다.
[Positions]
=>라인 렌더러 컴포넌트에는 positions 배열이 존재하는데 선을 이으는 점의 Vector3 배열이다.
해당 값의 0(시작) 과 1(끝)에 움직이는 오브젝트의 위치를 넣어 연결되는 선을 만드려 한다.
[Use World Position]
=>활성화하면 포인트가 월드 공간 좌표로 간주된다. 비활성화하면 이 컴포넌트가 연결된 게임 오브젝트의 트랜스폼에
속한다
[연결하기]
[문제점]
=>두 움직이는 오브젝트를 연결하려 Line Renderer컴포넌트를 추가해 주었다.
이동전, 생성되었을때 라인으로 연결하려 한다.Line Renderer의 연결은 다음과 같다 .
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveForward : MonoBehaviour
{
public LineRenderer Lenderer; //선의 시작 오브젝트
public Transform block; //선의 목적 오브젝트
// Start is called before the first frame update
void Start()
{
Lenderer = GetComponent<LineRenderer>();
Lenderer.SetPosition(0, this.transform.position); //선의 시작점 설정
Lenderer.SetPosition(1, block.position); //선의 끝점 설정
}
}
=>이렇게 나오는 이유는 Use World Space가 비활성화 되어 있어 , 해당 오브젝트 기준으로 위치를 잡기 때문이다.
해당 문제는 두가지 방식으로 해결이 가능하다.
[해결 - Use World Space]
=>Use World Space 옵션을 활성화 해준다 . 다만 WorldSpace 옵션이 활성화 된다면 , 이 컴포넌트가 연결된 게임 오브젝트의 트랜스폼에 속하지 못하기에 Update에서 계속 위치를 바꾸어 주어야 한다. 비효율적인 방식이다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveForward : MonoBehaviour
{
public LineRenderer Lenderer; //선의 시작 오브젝트
public Transform block; //선의 목적 오브젝트
// Start is called before the first frame update
void Start()
{
Lenderer = GetComponent<LineRenderer>();
Lenderer.SetPosition(0, this.transform.position);
Lenderer.SetPosition(1, block.position);
}
// 위치를 계속 바꾸어 준다
void Update()
{
Lenderer.SetPosition(0, this.transform.position);
Lenderer.SetPosition(1, block.position);
}
}
[해결 - 방향 Vector 사용]
=>Use World Space 옵션을 비활성화 해준다 . 시작 오브젝트와 목적 오브젝트간의 방향을 구하고 해당 값을 넣어준다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveForward : MonoBehaviour
{
public LineRenderer Lenderer; //선의 시작 오브젝트
public Transform block; //선의 목적 오브젝트
void Start()
{
Lenderer = GetComponent<LineRenderer>();
Lenderer.SetPosition(0, Lenderer.GetPosition(0));
//방향 구하기 : 방향 벡터값 = 목표 벡터 - 시작 벡터
Vector3 direction = block.position - transform.position;
Lenderer.SetPosition(1, direction);
}
}
[결과]
오브젝트에 종속되어 움직이며 , 제대로 연결되는 LineRenderer를 볼 수 있다
'유니티' 카테고리의 다른 글
[ 유니티 ] UI Tool Kit 02 . 첫 런타임 UI 만들기 (0) | 2023.02.10 |
---|---|
[유니티] Scene 격자 색상 변경 (0) | 2023.02.07 |
[Behavior Designer] 09 . 변수 (0) | 2023.01.18 |
[Behavior Designer] 08 . 디버깅 (0) | 2023.01.18 |
[Behavior Designer] 07 . 시야각에 있다면 쫓아가는 BT (0) | 2023.01.18 |