Coding Feature.

[Unity 2D] Portal 같은 게임 만들기 #4 포탈건 매커니즘 구현하기 1 (조준선 그리기) 본문

Toy Project/mini-portal [Unity2D]

[Unity 2D] Portal 같은 게임 만들기 #4 포탈건 매커니즘 구현하기 1 (조준선 그리기)

codingfeature 2024. 1. 6. 15:14

포탈건을 만들어보기로 했습니다.

 

우선 플레이어가 포탈건으로 조준할 때 조준선이 화면에 보이도록 만들어보겠습니다.

 

유니티 엔진에서 제공하는 Line Renderer를 사용했습니다.

 

우선 Portal Gun Script 이라는 오브젝트를 생성하고 PortalGunScript.cs를 작성했습니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PortalGunScript : MonoBehaviour
{
    public LineRenderer m_lineRenderer;
    public GameObject m_player;

    public float aimLineLength;

    Vector3 m_startPos;
    Vector3 m_endPos;
    Vector3 m_mousePos;
    Vector3 m_mouseDir;

    // Start is called before the first frame update
    void Start()
    {
        aimLineLength = 10.0f;
    }

    // Update is called once per frame
    void Update()
    {
        DrawAimLine();
    }

    void DrawAimLine()
    {
        m_mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); // 화면상 마우스 좌표 -> 게임상 좌표로 변환.

        m_lineRenderer.enabled = true;

        m_startPos = m_player.transform.position;
        m_startPos.z = 0;
        m_lineRenderer.SetPosition(0, m_startPos); // 캐릭터 좌표에서 선 시작.

        m_endPos = m_mousePos;
        m_endPos.z = 0;

        m_mouseDir = (m_endPos - m_startPos);
        m_mouseDir.Normalize(); // 캐릭터 To 마우스까지 방향의 단위벡터.

        m_lineRenderer.SetPosition(1, m_mouseDir * aimLineLength + m_startPos);
    }
}

 

Camera.main.ScreenToWorldPoint라는 매우 유용한 함수를 사용했습니다.

위 함수 인자에 스크린 상의 마우스 좌표를 입력해주어 게임 World 상 좌표로 변환시켜줍니다!

 

그리고 캐릭터에서부터 마우스위치까지의 단위벡터를 구하고 aimLineLength 만큼 곱해서 일정한 길이만큼 선의 길이가 늘어나도록 했습니다.

 

위 코드를 작성하는데에는 아래 글이 매우 큰 도움이 되었습니다!

아래 글에는 추가로 선의 길이를 제한하는 (Clamp) 기능도 구현하는 방법이 있으므로 궁금하시면 참고바랍니다.

 

Add an aiming line in Unity 2D. Objective: Show the player the aiming… | by Daniel Kirwan | Medium

 

Add an aiming line in Unity 2D

Objective: Show the player the aiming line

danielkirwan.medium.com

 

 

 

 

다음은 조준선 방향으로 포탈을 생성하는 매커니즘을 구현해보도록 하겠습니다!