[Toy][Unity] 타일맵(Tilemap) 위에 아이템 생성

0시0분·2023년 11월 15일
0

Toy

목록 보기
2/18


카메라 뷰 내 원하는 위치에 타일 생성하기
👀 https://blog.naver.com/tngusmiso/221346349062

카메라 뷰 내의 타일맵 랜덤한 위치에 아이템을 생성하는 기능을 만들고자 했다.
큰 틀은 위 블로그를 참조했고, 랜덤위치를 구하는 코드만 추가했다.

1. 최소/최대 좌표 범위 구하기

카메라의 rect를 조절해서 화면비를 고정시켰기 때문에 해당 부분까지 고려해서 값을 계산해야 했다.

해상도에 따른 화면비 고정
👀 https://giseung.tistory.com/19

1-1. 스크린 최대 최소 값 계산

float initScreenX = Screen.width * Camera.main.rect.x;
float initScreenY = Screen.height * Camera.main.rect.y;
m_screenSize = new Vector2(Screen.width * Camera.main.rect.width, 
						   Screen.height * Camera.main.rect.height);

Vector3 worldStartPos = Camera.main.ScreenToWorldPoint(new Vector3(initScreenX, initScreenY + m_screenSize.y));
Vector3 worldEndPos = Camera.main.ScreenToWorldPoint(new Vector3(initScreenX + m_screenSize.x, initScreenY));

1-2. 타일(아이템)을 설치할수 있는 최대 최소 좌표값 계산

m_minWidthTilePosX = Mathf.FloorToInt(worldStartPos.x);
m_maxWidthTilePosX = Mathf.CeilToInt(worldEndPos.x);

// 🔽 피봇이 왼쪽 위로 고정되어 있기 때문에 m_tileSize를 더해주지 않으면 한칸씩 밀려서 생성됨
// (현재까지 테스트한 해상도로는 아래 코드가 잘 동작했다.. 변경되면 또 달라질수도 있음)
m_minHeightTilePosX = Mathf.FloorToInt(worldEndPos.y) + (int)m_tileSize;
m_maxHeightTilePosX = Mathf.CeilToInt(worldStartPos.y) + (int)m_tileSize;

2. 랜덤 좌표 생성

int x = Random.Range(m_minWidthTilePos, m_maxWidthTilePos);
int y = Random.Range(m_minHeightTilePos, m_maxHeightTilePos);
m_item.transform.position = new Vector3(m_tileSize * x, m_tileSize * y, 0);
GameObject newItem = Instantiate(m_item, GameManager.Inst.UIParent.transform);

0개의 댓글