TIL (80) | 2023.11.17 | Minimap

kjg5370·2023년 11월 17일
0

TIL

목록 보기
78/91
post-thumbnail

들어가기 앞서

오늘은 저번에 만든 미니맵이 카메라를 하나 더 사용하여 발생하는 불필요한 배치를 줄이기 위해 다른 방식으로 미니맵을 만들어보았습니다.

오늘 배운 것

  • 미니맵 이미지
    일단 미니맵을 랜더텍스쳐로 카메라에 연결하여 하는 것이 아닌 맵 자체를 캡쳐하여 스프라이트 이미지 형태로 만들었습니다.

  • 플레이어 표시
    맵 상단 왼쪽에 미니맵UI를 만들고 플레이어는 움직이지 않도록 미니맵UI 가운데에 배치하였습니다.

미니맵 스크립트를 만들어서 플레이어가 움직인 만큼 미니맵의 UI를 움직여주었습니다.

  private void Start()
    {
        if (player != null)
        {
            // 초기화 시 플레이어의 초기 위치 저장
            playerLastPosition = player.position;
        }
    }

    private void Update()
    {
        if (player != null)
        {
            // 플레이어의 현재 위치를 가져옵니다.
            Vector3 playerPosition = player.position;

            // 플레이어가 이동한 만큼 맵의 위치를 반대로 이동시킵니다.
            Vector3 offset = playerPosition - playerLastPosition;

            // 플레이어의 z방향 이동을 미니맵의 x 방향 이동으로 변환합니다.>
            float mapMovementX = -offset.z * moveXSpeed;

            // 플레이어의 x방향 이동을 미니맵의 y 방향 이동으로 변환합니다.>
            float mapMovementY = offset.x * moveYSpeed;


            // 미니맵의 움직임을 플레이어와 동기화하되, 특정 범위 내에서만 움직이도록 제한합니다.
            float clampedMapX = Mathf.Clamp(map2d.localPosition.x + mapMovementX, minX, maxX);
            float clampedMapY = Mathf.Clamp(map2d.localPosition.y + mapMovementY, minY, maxY);

            // 미니맵의 위치를 업데이트합니다.
            map2d.localPosition = new Vector3(clampedMapX, clampedMapY, 0);

            // 플레이어의 현재 위치를 저장합니다.
            playerLastPosition = playerPosition;
        }
    }

플레이어가 움직인 만큼 UI의 방향을 플레이어가 움직인 방향에 맞게 조정하여 움직이도록 동기화를 하여서 원래 카메라를 사용하여 만들었던 미니맵 처럼 보이도록 구성하였습니다.

profile
학생입니다

0개의 댓글