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
다음은 조준선 방향으로 포탈을 생성하는 매커니즘을 구현해보도록 하겠습니다!