Programing/Unity(C#)
[Unity] 오브젝트 위치를 Tilemap/GridLayout 칸에 맞추기
hye3193
2024. 3. 5. 21:52
World나 Screen 좌표계 외에도 Tilemap이나 GridLayout을 기준으로 오브젝트들의 위치를 조절할 수 있다
GridLayout
// Snap the GameObject to parent GridLayout
using UnityEngine;
public class ExampleClass : MonoBehaviour
{
void Start()
{
GridLayout gridLayout = transform.parent.GetComponentInParent<GridLayout>();
Vector3Int cellPosition = gridLayout.WorldToCell(transform.position);
transform.position = gridLayout.CellToWorld(cellPosition);
}
}
유니티 공식문서 상에서는 위와 같이 사용 예를 보여주고 있다
기준이 될 gridLayout을 정하고, 해당 레이아웃을 기준으로 CellToWorld 함수에 Vector3Int 값을 넣어주면 cell 좌표의 위치를 뽑아낼 수 있다
- GridLayout의 CellToWorld를 사용하면 위와 같이 교차점을 기준으로 좌표가 잡히게 된다
- (0, 0, 0) 좌표는 world에서의 (0, 0, 0) 위치와 동일하다
Tilemap
// Snap the GameObject to parent Tilemap center of cell
using UnityEngine;
using UnityEngine.Tilemaps;
public class ExampleClass : MonoBehaviour
{
void Start()
{
Tilemap tilemap = transform.parent.GetComponent<Tilemap>();
Vector3Int cellPosition = tilemap.WorldToCell(transform.position);
transform.position = tilemap.GetCellCenterWorld(cellPosition);
}
}
마찬가지로 유니티 공식 문서에서의 사용 예시다
GridLayout과 비슷하나, tilemap 컴포넌트를 받아와서 기준으로 써야 한다
GetCellCenterWorld 함수에 인자로 Vector3Int 값을 넘겨주면 world 좌표 기준으로 위치를 반환해준다
* tilemap 에서도 CellToWorld 함수를 쓸 수 있다, 결과 값은 GridLayout과 동일하다
- Tilemap의 GetCellCenterWorld를 사용하면 위와 같이 Cell의 중심 좌표를 기준으로 좌표가 설정된다
- (0, 0, 0)의 위치는 world 좌표 기준 (0, 0, 0)에서 우측 상단에 위치한 셀의 중심부이다