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)에서 우측 상단에 위치한 셀의 중심부이다
'Programing > Unity(C#)' 카테고리의 다른 글
[C#] Action 이벤트가 중복 실행되는 문제 (0) | 2024.03.12 |
---|---|
[Unity] 모양이 유지되는 슬라이더(Slider) (0) | 2024.03.08 |
[Unity] 게임 오브젝트 이동 방법(transform, rigidbody) (0) | 2024.03.05 |
[Unity] 버튼 눌리는 이벤트(Pointer Down, Pointer Up) (0) | 2024.03.04 |
[C#] using static (정적 멤버 직접 사용) (0) | 2024.03.04 |