카메라 뷰 내 원하는 위치에 타일 생성하기
👀 https://blog.naver.com/tngusmiso/221346349062
카메라 뷰 내의 타일맵 랜덤한 위치에 아이템을 생성하는 기능을 만들고자 했다.
큰 틀은 위 블로그를 참조했고, 랜덤위치를 구하는 코드만 추가했다.
카메라의 rect를 조절해서 화면비를 고정시켰기 때문에 해당 부분까지 고려해서 값을 계산해야 했다.
해상도에 따른 화면비 고정
👀 https://giseung.tistory.com/19
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));
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;
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);