Chapter 13-4. 미니 RPG : 마우스 커서

Date:     Updated:

카테고리:

태그:

인프런에 있는 Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click

Chapter 13. 미니 RPG 만들기

🚀 마우스 커서

마우스 커서 에셋도 에셋스토어에 많다!

  • 경우에 따라 커서의 모습을 2 가지로 할 것이다.
    • 일반적일 떄의 마우스 커서 모습 👉 손 모양 커서
    • 보스에 커서를 가져다댔을 때의 커서 모습 👉 칼 모양 커서

✈ 커서 이미지

image

커서로 사용할 이미지의 타입을 Cursor로 설정해준다.


✈ 커서 적용하기

image

Project Settings - Player - Default Cursor 에서 디폴트 커서 이미지를 적용시킬 수 있다. 위와 같이 손쉽게 커서를 바꾸는 방법도 있지만 경우에 따라 커서의 모습을 다르게 할 것이기 때문에 코드에서 설정해줄 것이다.

📜PlayerController

public class PlayerController : MonoBehaviour
{
    Texture2D _attackIcon;
    Texture2D _handIcon;

    enum CursorType
	{
		None,
		Attack,
		Hand,
	}

	CursorType _cursorType = CursorType.None;

    void Start()
    {
        _attackIcon = Managers.Resource.Load<Texture2D>("Textures/Cursor/Attack");
        _handIcon = Managers.Resource.Load<Texture2D>("Textures/Cursor/Hand");
    }

    void Update()
    {
        UpdateMouseCursor();
        
        // ...
    }

    void UpdateMouseCursor()
    {
		Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

		RaycastHit hit;
		if (Physics.Raycast(ray, out hit, 100.0f, _mask))
		{
			if (hit.collider.gameObject.layer == (int)Define.Layer.Monster)
			{
				if (_cursorType != CursorType.Attack)
				{
					Cursor.SetCursor(_attackIcon, new Vector2(_attackIcon.width / 5, 0), CursorMode.Auto);
					_cursorType = CursorType.Attack;
				}
			}
			else
			{
				if (_cursorType != CursorType.Hand)
				{
					Cursor.SetCursor(_handIcon, new Vector2(_handIcon.width / 3, 0), CursorMode.Auto);
					_cursorType = CursorType.Hand;
				}
			}
		}
	}
}
  • Texture2D 👉 2D 텍스처. 이 타입으로 커서이미지 로드할 것.
    • _attackIcon : 공격 때 커서 텍스처
    • _handIcon : 땅에 가져다 댔을 때 커서 텍스처
  • CursorType 커서 상태를 enum으로 관리
  • Start
    • _attackIcon, _handIcon 에 커서 텍스처 로드
  • UpdateMouseCursor
    • 게임 화면에 클릭한 곳이 몬스터일 경우 👉 _attackIcon 커서로 세팅
    • 게임 화면에 클릭한 곳이 몬스터가 아닐 경우 👉 _handIcon 커서로 세팅
    • 커서가 너무 빈번히 계속해서 세팅되면 깜빡 깜빡 거린다.
      • if (_cursorType != CursorType.Attack), if (_cursorType != CursorType.Hand) 과정을 해주면 진짜 변경되야 할 때만 세팅되므로 이런 현상이 사라진다.
      • 위 조건 처리를 안해주면 매프레임마다 Cursor.SetCursor 가 실행되는거나 마찬가지이기 때문에 계속 세팅되서 커서가 계속 깜빡거리게 된다. ㅠㅠ

Cursor.SetCursor(커서이미지, 커서포인트 위치, 커서 모드

  • 첫 번째 인수 👉 커서의 Texture2D 이미지

image

  • 두 번째 인수 👉 마우스 커서 위치가 될 곳
    • 마우스 이미지의 왼쪽 상단(빨간점) 부분이 좌표로 (0, 0)이 된다. 칼 끝과 손가락 끝을 커서의 위치 좌표 기준점으로 지정하는 것이 좋겠으니 (_attackIcon.width / 5, 0) 만큼, 즉 대충 너비의 1/5 정도 더 이동한 좌표를 커서의 기준점 좌표로 삼는다.
  • 세 번재 인수 👉 커서의 모드
    • Cursor.Auto : 하드웨어의 커서를 사용
      • 윈도우 커서에 이미지를 입혀 사용하게 된다.
    • Cursor.ForceSoftware : 소프트웨어에서 커서를 그려서 사용


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Unity Lesson 2 카테고리 내 다른 글 보러가기

댓글 남기기