전 포스팅에서 필수로 구현해야 하는 기능들을 정리하였다.
그 중에서 이번 포스팅에서는 저격 커서를 만들어 보도록 하자.
우선 저격 커서 모양을 만들어 보도록 하자
Hierarchy 에서 마우스 오른쪽 버튼을 누른 뒤 2D → Sprites → Square 를 눌러 사각형을 생성 해 준다.
크기를 조절한 뒤, 오른쪽에 있는 Inspector에서 눈에 잘 띄는 색으로 변경 해 준다.
그리고 저 도형을 3개 더 복사 해 준 다음, Z Rotation의 값을 조절해 각도를 조절해 주어 아래 그림과 같이 만들어 준다.
그리고 1번 사진과 같은 방법으로 Create Empty를 눌러 빈 오브젝트를 생성 해 준다.
그 다음에 이름을 바꿔 주고 만들어 낸 사각형 도형들을 드래그 해 주어 빈 오브젝트의 자식들로 만들어 준다.
커서 오브젝트에서 마우스 오른쪽 버튼을 누른 뒤 2D → Sprites → Circle로 원을 만들어 준다.
Inspector 창에서 Scale 값을 통하여 크기를 조절 해 준 다음, 색을 입혀 준다.
그리고 아까 빈 오브젝트 밑에 넣어 두었던 자식들을 모두 선택하여 Transform - Position의 좌표를 모두 0으로 설정 해 주면 빈 오브젝트의 중앙으로 이동하게 될 것이다.
이제 적절하게 좌표들을 조절 해 주면 위 사진과 같이 될 것이다.
(본인은 X,Y축으로 0.7 만큼의 거리들을 띄워 주었다.)
이제 만들어진 오브젝트를 Assets에 넣어주어 Prefab화 해 준다.
이제 커서 모양을 만들어 냈다. 이제 코드를 통하여 마우스 포인터를 따라 다니게 만들어 보겠다.
우선 적당한 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로 드래그 해 준다.
그리고 아까 만든 Prefab을 밑줄 친 곳으로 드래그 해 준다.
이제 실행을 해 보도록 하자.
움짤로까지는 못땄지만 이렇게 마우스 커서 대신에 만들어 낸 커서가 보이게 됨을 볼 수 있다.
간단한 코드 설명을 보려면 아래 글을 펼쳐 보면 된다.
Start() 함수에서 pointerPrefab으로 받았던 커서 Prefab을 GameObject로 생성 해 주게 된다.
그리고 기존 마우스 커서가 인게임에서는 보이지 않게 가려주게 되고 (Cursor.visible = false;)
Update에서 Input.mousePosition 을 통하여 현재 마우스 커서의 좌표를 실시간으로 업데이트 해 주게 된다.
mousePos = UnityEngine.Camera.main.ScreenToWorldPoint(mousePos); 를 통하여 카메라가 비추는 화면 내부의 좌표 값으로 변환시켜 준다.
그 다음에 변환한 좌표 값을 생성한 커서의 좌표로 실시간으로 설정 해 주게 되는 것이다.
일단 0번 포스팅에서 적어 놓았던 1번 기능을 구현하였다.
1번 기능은 구현하기 매우 쉬웠기에 1개의 포스팅으로 끝나게 되었지만 그 다음 기능부터는 포스팅을 좀 많이 적게 될 것이다.
'유니티 > Hunting게임[2D]' 카테고리의 다른 글
2D 미니게임 만들기 연습 5 ] 스코어 관리 설정 (0) | 2022.08.24 |
---|---|
2D 미니게임 연습 4 ] 물체 도트 디자인 (0) | 2022.08.24 |
2D 미니게임 만들기 연습 3 ] 물체에 움직임 부여하기 (0) | 2022.08.22 |
2D 미니게임 만들기 연습 2 ] 클릭시 반응하는 물체 만들기 (0) | 2022.08.17 |
2D 미니게임 만들기 연습 0 ] 주제 선정 (0) | 2022.08.16 |