본문 바로가기

유니티

[유니티] Line Renderer 로 움직이는 오브젝트를 연결하기

[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를 볼 수 있다