이번엔 스테이지 맵을 더 보기좋게 보완해보도록 하겠다

가장 먼저 거슬리는 분홍색 실선부터 검정 점선으로 바꿔보도록 하자

우선 점선으로 쓰일 선 이미지를 하나 만들어준다
절반은 검정, 절반은 투명이다. (중요! 세로가 아니라 가로로 만들어줄것. 유니티는 가로 기준으로 반복한다)

이미지를 가져와 설정을 만져준다
텍스쳐타입, Wrap Mode > Repeat, Filter Mode > Point
Max Size, Compression 모두 알아서 맞춰주자

그리고 메터리얼을 하나 만들고 쉐이더를 Unlit/Transparent로 잡아주자
그리고 저 안에 내가 방금 가져온 이미지를 넣어주면 된다

그리고 여태 공석이었던 라인 메터리얼 자리에 넣어주면 끝!

아... 근데 딱 보니까 이미지가 들어가 반복없이 딱 한번만 보여주는것 같다
내가 원하는 점선은 이런 느낌이 아니다
void CreateLine(Vector2 start, Vector2 end)
{
....
이미지를 쭈욱 늘리지 말고, 타일(Tile)처럼 반복해서 붙이도록 설정!
lr.textureMode = LineTextureMode.Tile;
// 3. 선의 거리를 계산해서 점선이 몇 번 반복될지(촘촘함) 결정
float distance = Vector2.Distance(start, end);
float repeatingFactor = 0.5f; // 숫자를 키울수록 점선이 더 촘촘해짐. 이게 중요
lr.material.mainTextureScale = new Vector2(distance * repeatingFactor, 1f);
}
코드를 조금 손봐주자 여기서 중요한건 점선을 촘촘하게 만드는 저 변수. 0.5 정도는 내려야 딱 알맞게 나온다

우와! 선이 좀 더 굵어도 이쁠것 같은데 이건 나중에 아이콘 싹 다 갈아엎으면서 그때 고쳐보도록 하자
----------------------------
이번엔 현재 진행상황에 해당되는 오브젝트만 활성화하도록 해보겠다
[Header("게임 진행 상황")]
public int currentFloor = 0;
일단 게임매니저에 현재 진행 상황을 담고 있는 변수를 하나 추가해준다
void Start()
{
originalScale = transform.localScale;
spriteRenderer = GetComponent<SpriteRenderer>();
originalColor = spriteRenderer.color;
nodeCollider = GetComponent<Collider2D>();
// 현재 층인지 확인
if (myNodeData != null && GameManager.instance != null)
{
bool isCurrentFloor = (myNodeData.y == GameManager.instance.currentFloor);
if (isCurrentFloor)
{
// 현재 층 노드: 펄스 애니메이션과 원래 색상 유지, 콜라이더 활성화
pulseTween = transform.DOScale(originalScale * 1.2f, 0.8f)
.SetLoops(-1, LoopType.Yoyo)
.SetEase(Ease.InOutSine);
if (nodeCollider != null)
nodeCollider.enabled = true;
}
else
{
// 다른 층 노드: 색상 어둡게 (RGB 150/255) 및 콜라이더 비활성화
Color dimmedColor = new Color(150f/255f, 150f/255f, 150f/255f, originalColor.a);
spriteRenderer.color = dimmedColor;
if (nodeCollider != null)
nodeCollider.enabled = false;
}
}
}
그리고 currentFloor의 값과 mynodedata.y 값이 일치하는 이미지만
커졌다 작아졌다 하는 효과를 주고
그 외에 나머지 오브젝트들은 RGB값을 150으로 내린 뒤 클릭 비활성화를 걸어놔
누가봐도 해금되지 않는 것처럼 보이는 효과를 준다

그럼 이렇게 된다. 이제 영상을 첨부 못한다는 사실이 너무나 통탄스럽다 흑흑
void OnMouseUpAsButton()
{
if (myNodeData != null)
{
Debug.Log($"클릭 성공! 여기는 {myNodeData.y + 1}층에 있는 {myNodeData.type} 방입니다.");
SceneManager.LoadScene("InGameScene");
}
}
추가로 이제 오브젝트를 클릭 혹은 터치를 하면 인게임씬으로 이동한다
터치 오류를 방지하기 위해 OnMouseUpAsButton 을 사용했다
이렇게 하면 드래그하는 과정에서 닿은 오브젝트는 클릭으로 간주하지 않는다
'유니티 > 유니티 공부' 카테고리의 다른 글
| 타일맵, 시네머신 (3) | 2026.05.20 |
|---|---|
| #4 슬레이 더 스파이어 방식 스테이지 랜덤 생성 (1) | 2026.02.24 |
| #3 스테이지 이동, 스테이지 무한생성 구현, 점프 횟수 제한(바닥 인식) (0) | 2026.02.16 |
| #2 플레이어 타격, 게임오버 기본 구현 (1) | 2026.02.14 |
| 타일맵 사용법 (0) | 2026.01.30 |