본문 바로가기

유니티/Hunting게임[2D]

2D 미니게임 만들기 연습 1 ] 저격 커서 제작

전 포스팅에서 필수로 구현해야 하는 기능들을 정리하였다.

그 중에서 이번 포스팅에서는 저격 커서를 만들어 보도록 하자.

 

우선 저격 커서 모양을 만들어 보도록 하자

 

1. 도형 생성

Hierarchy 에서 마우스 오른쪽 버튼을 누른 뒤 2D → Sprites → Square 를 눌러 사각형을 생성 해 준다.

 

2. 도형 가공

크기를 조절한 뒤, 오른쪽에 있는 Inspector에서 눈에 잘 띄는 색으로 변경 해 준다.

 

그리고 저 도형을 3개 더 복사 해 준 다음, Z Rotation의 값을 조절해 각도를 조절해 주어 아래 그림과 같이 만들어 준다.

 

3. 커서 모양 제작

 

그리고 1번 사진과 같은 방법으로 Create Empty를 눌러 빈 오브젝트를 생성 해 준다.

 

4. 커서 그룹 만들기

그 다음에 이름을 바꿔 주고 만들어 낸 사각형 도형들을 드래그 해 주어 빈 오브젝트의 자식들로 만들어 준다.

 

5. 클릭 위치에 배치할 원 생성

커서 오브젝트에서 마우스 오른쪽 버튼을 누른 뒤 2D → Sprites → Circle로 원을 만들어 준다.

 

6. 원 설정

 

Inspector 창에서 Scale 값을 통하여 크기를 조절 해 준 다음, 색을 입혀 준다.

 

7. 자식들의 위치 세팅

 

그리고 아까 빈 오브젝트 밑에 넣어 두었던 자식들을 모두 선택하여 Transform - Position의 좌표를 모두 0으로 설정 해 주면 빈 오브젝트의 중앙으로 이동하게 될 것이다.

 

8. 좌표 조정

이제 적절하게 좌표들을 조절 해 주면 위 사진과 같이 될 것이다.

(본인은 X,Y축으로 0.7 만큼의 거리들을 띄워 주었다.)

 

9. Prefab화 하기

이제 만들어진 오브젝트를 Assets에 넣어주어 Prefab화 해 준다.

 

 

이제 커서 모양을 만들어 냈다. 이제 코드를 통하여 마우스 포인터를 따라 다니게 만들어 보겠다.


10. 스크립트 생성

 

우선 적당한 Asset에서 적당히 Scripts를 모아 둘 폴더를 만들고 Create → C# Script를 통하여 스크립트를 생성 해 준다.

 

Visual Studio가 열리게 될 것이다.

 

우선 코드에서는 앞서 만들었던 Prefab의 형태를 받아서 생성한 뒤, Prefab의 좌표를 마우스 포인터의 좌표로 계속 갱신 해 주어야 한다.

 

즉, 아래 코드와 같이 적을 수 있을 것이다.

 

MousePointer.cs 초안

public GameObject pointerPrefab;
private GameObject pointerRed;
Vector2 mousePos;


// Start is called before the first frame update
void Start()
{
    pointerRed = Instantiate(pointerPrefab) as GameObject;
    Cursor.visible = false; // 기본 마우스 커서가 보이지 않게 하는 부분
}

void Update()
    {
        mousePos = Input.mousePosition;
        mousePos = UnityEngine.Camera.main.ScreenToWorldPoint(mousePos);
        pointerRed.transform.position = mousePos;

        if (Input.GetMouseButtonDown(0))
        {
            Debug.Log(mousePos);
        }

    }

그리고 위 코드를 실행시킬 오브젝트가 필요하다.

 

빈 오브젝트를 하나 만들어 이름을 Manager로 지은 뒤, 해당 코드를 Manager로 드래그 해 준다.

 

11. Manager

그리고 아까 만든 Prefab을 밑줄 친 곳으로 드래그 해 준다.

 

이제 실행을 해 보도록 하자.

 

움짤로까지는 못땄지만 이렇게 마우스 커서 대신에 만들어 낸 커서가 보이게 됨을 볼 수 있다.

 

12. 마우스 커서 적용

 

간단한 코드 설명을 보려면 아래 글을 펼쳐 보면 된다.

더보기

Start() 함수에서 pointerPrefab으로 받았던 커서 Prefab을 GameObject로 생성 해 주게 된다.

 

그리고 기존 마우스 커서가 인게임에서는 보이지 않게 가려주게 되고 (Cursor.visible = false;)

 

Update에서 Input.mousePosition 을 통하여 현재 마우스 커서의 좌표를 실시간으로 업데이트 해 주게 된다.

mousePos = UnityEngine.Camera.main.ScreenToWorldPoint(mousePos); 를 통하여 카메라가 비추는 화면 내부의 좌표 값으로 변환시켜 준다.

 

그 다음에 변환한 좌표 값을 생성한 커서의 좌표로 실시간으로 설정 해 주게 되는 것이다.


일단 0번 포스팅에서 적어 놓았던 1번 기능을 구현하였다.

 

1번 기능은 구현하기 매우 쉬웠기에 1개의 포스팅으로 끝나게 되었지만 그 다음 기능부터는 포스팅을 좀 많이 적게 될 것이다.